Home | History | Annotate | Download | only in extensions
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/extensions/extension_test_message_listener.h"
      6 #include "chrome/browser/extensions/platform_app_browsertest_util.h"
      7 #include "chrome/common/chrome_switches.h"
      8 #include "content/test/net/url_request_prepackaged_interceptor.h"
      9 #include "net/url_request/url_fetcher.h"
     10 
     11 class AdViewTest : public extensions::PlatformAppBrowserTest {
     12  protected:
     13   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     14     extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line);
     15     command_line->AppendSwitch(switches::kEnableAdview);
     16     command_line->AppendSwitch(switches::kEnableAdviewSrcAttribute);
     17   }
     18 };
     19 
     20 // This test checks the "loadcommit" event is called when the page inside an
     21 // <adview> is loaded.
     22 IN_PROC_BROWSER_TEST_F(AdViewTest, LoadCommitEventIsCalled) {
     23   ASSERT_TRUE(StartEmbeddedTestServer());
     24 
     25   ASSERT_TRUE(RunPlatformAppTest(
     26       "platform_apps/ad_view/loadcommit_event")) << message_;
     27 }
     28 
     29 // This test checks the "loadabort" event is called when the "src" attribute
     30 // of an <adview> is an invalid URL.
     31 IN_PROC_BROWSER_TEST_F(AdViewTest, LoadAbortEventIsCalled) {
     32   ASSERT_TRUE(StartEmbeddedTestServer());
     33 
     34   ASSERT_TRUE(RunPlatformAppTest(
     35       "platform_apps/ad_view/loadabort_event")) << message_;
     36 }
     37 
     38 // This test checks the page loaded inside an <adview> has the ability to
     39 // 1) receive "message" events from the application, and 2) use
     40 // "window.postMessage" to post back a message to the application.
     41 #if defined(OS_WIN)
     42 // Flaky, or takes too long time on Win7. (http://crbug.com/230271)
     43 #define MAYBE_CommitMessageFromAdNetwork DISABLED_CommitMessageFromAdNetwork
     44 #else
     45 #define MAYBE_CommitMessageFromAdNetwork CommitMessageFromAdNetwork
     46 #endif
     47 IN_PROC_BROWSER_TEST_F(AdViewTest, MAYBE_CommitMessageFromAdNetwork) {
     48   ASSERT_TRUE(StartEmbeddedTestServer());
     49 
     50   ASSERT_TRUE(RunPlatformAppTest(
     51       "platform_apps/ad_view/onloadcommit_ack")) << message_;
     52 }
     53 
     54 // This test checks the page running inside an <adview> has the ability to load
     55 // and display an image inside an <iframe>.
     56 // Note: Disabled for initial checkin because the test depends on a binary
     57 //       file (image035.png) which the trybots don't process correctly when
     58 //       first checked-in.
     59 IN_PROC_BROWSER_TEST_F(AdViewTest, DISABLED_DisplayFirstAd) {
     60   ASSERT_TRUE(StartEmbeddedTestServer());
     61 
     62   ASSERT_TRUE(RunPlatformAppTest(
     63       "platform_apps/ad_view/display_first_ad")) << message_;
     64 }
     65 
     66 // This test checks that <adview> attributes are also exposed as properties
     67 // (with the same name and value).
     68 #if defined(OS_WIN)
     69 // Flaky on Win XP. (http://crbug.com/264362)
     70 #define MAYBE_PropertiesAreInSyncWithAttributes \
     71     DISABLED_PropertiesAreInSyncWithAttributes
     72 #else
     73 #define MAYBE_PropertiesAreInSyncWithAttributes \
     74     PropertiesAreInSyncWithAttributes
     75 #endif
     76 IN_PROC_BROWSER_TEST_F(AdViewTest, MAYBE_PropertiesAreInSyncWithAttributes) {
     77   ASSERT_TRUE(StartEmbeddedTestServer());
     78 
     79   ASSERT_TRUE(RunPlatformAppTest(
     80       "platform_apps/ad_view/properties_exposed")) << message_;
     81 }
     82 
     83 // This test checks an <adview> element has no behavior when the "adview"
     84 // permission is missing from the application manifest.
     85 IN_PROC_BROWSER_TEST_F(AdViewTest, AdViewPermissionIsRequired) {
     86   ASSERT_TRUE(StartEmbeddedTestServer());
     87 
     88   ASSERT_TRUE(RunPlatformAppTest(
     89       "platform_apps/ad_view/permission_required")) << message_;
     90 }
     91 
     92 // This test checks that 1) it is possible change the value of the "ad-network"
     93 // attribute of an <adview> element and 2) changing the value will reset the
     94 // "src" attribute.
     95 // Broken test: http://crbug.com/257465.
     96 IN_PROC_BROWSER_TEST_F(AdViewTest, DISABLED_ChangeAdNetworkValue) {
     97   ASSERT_TRUE(StartEmbeddedTestServer());
     98 
     99   ASSERT_TRUE(RunPlatformAppTest(
    100       "platform_apps/ad_view/change_ad_network")) << message_;
    101 }
    102 
    103 class AdViewNoSrcTest : public extensions::PlatformAppBrowserTest {
    104  protected:
    105   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
    106     extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line);
    107     command_line->AppendSwitch(switches::kEnableAdview);
    108     //Note: The "kEnableAdviewSrcAttribute" flag is not here!
    109   }
    110 };
    111 
    112 // This test checks an invalid "ad-network" value (i.e. not whitelisted)
    113 // is ignored.
    114 IN_PROC_BROWSER_TEST_F(AdViewNoSrcTest, InvalidAdNetworkIsIgnored) {
    115   ASSERT_TRUE(StartEmbeddedTestServer());
    116 
    117   ASSERT_TRUE(RunPlatformAppTest(
    118       "platform_apps/ad_view/invalid_ad_network")) << message_;
    119 }
    120 
    121 // This test checks the "src" attribute is ignored when the
    122 // "kEnableAdviewSrcAttribute" is missing.
    123 IN_PROC_BROWSER_TEST_F(AdViewNoSrcTest, EnableAdviewSrcAttributeFlagRequired) {
    124   ASSERT_TRUE(StartEmbeddedTestServer());
    125 
    126   ASSERT_TRUE(RunPlatformAppTest(
    127       "platform_apps/ad_view/src_flag_required")) << message_;
    128 }
    129 
    130 // This test checks 1) an <adview> works end-to-end (i.e. page is loaded) when
    131 // using a whitelisted ad-network, and 2) the "src" attribute is never exposed
    132 // to the application.
    133 IN_PROC_BROWSER_TEST_F(AdViewNoSrcTest, SrcNotExposed) {
    134   base::FilePath file_path = test_data_dir_
    135     .AppendASCII("platform_apps")
    136     .AppendASCII("ad_view/src_not_exposed")
    137     .AppendASCII("ad_network_fake_website.html");
    138 
    139   // Note: The following URL is identical to the whitelisted url
    140   //       for "admob" (see ad_view.js).
    141   GURL url = GURL("https://admob-sdk.doubleclick.net/chromeapps");
    142   std::string scheme = url.scheme();
    143   std::string hostname = url.host();
    144 
    145   content::URLRequestPrepackagedInterceptor interceptor(scheme, hostname);
    146   interceptor.SetResponse(url, file_path);
    147 
    148   ASSERT_TRUE(RunPlatformAppTest(
    149       "platform_apps/ad_view/src_not_exposed")) << message_;
    150   ASSERT_EQ(1, interceptor.GetHitCount());
    151 }
    152 
    153 class AdViewNotEnabledTest : public extensions::PlatformAppBrowserTest {
    154  protected:
    155   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
    156     extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line);
    157     //Note: The "kEnableAdview" flag is not here!
    158   }
    159 };
    160 
    161 // This test checks an <adview> element has no behavior when the "kEnableAdview"
    162 // flag is missing.
    163 IN_PROC_BROWSER_TEST_F(AdViewNotEnabledTest, EnableAdviewFlagRequired) {
    164   ASSERT_TRUE(StartEmbeddedTestServer());
    165 
    166   ASSERT_TRUE(RunPlatformAppTest(
    167       "platform_apps/ad_view/flag_required")) << message_;
    168 }
    169