Home | History | Annotate | Download | only in content_settings
      1 // Copyright 2014 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 <vector>
      6 
      7 #include "base/files/file_path.h"
      8 #include "base/strings/utf_string_conversions.h"
      9 #include "chrome/browser/ui/browser.h"
     10 #include "chrome/browser/ui/browser_content_setting_bubble_model_delegate.h"
     11 #include "chrome/browser/ui/content_settings/content_setting_bubble_model.h"
     12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
     13 #include "chrome/common/content_settings_types.h"
     14 #include "chrome/test/base/in_process_browser_test.h"
     15 #include "chrome/test/base/ui_test_utils.h"
     16 #include "content/public/test/test_navigation_observer.h"
     17 #include "net/test/spawned_test_server/spawned_test_server.h"
     18 #include "testing/gtest/include/gtest/gtest.h"
     19 
     20 const base::FilePath::CharType kDocRoot[] =
     21     FILE_PATH_LITERAL("chrome/test/data");
     22 
     23 class ContentSettingBubbleModelMixedScriptTest : public InProcessBrowserTest {
     24  protected:
     25   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
     26     https_server_.reset(
     27         new net::SpawnedTestServer(
     28             net::SpawnedTestServer::TYPE_HTTPS,
     29             net::SpawnedTestServer::SSLOptions(
     30                 net::SpawnedTestServer::SSLOptions::CERT_OK),
     31             base::FilePath(kDocRoot)));
     32     ASSERT_TRUE(https_server_->Start());
     33   }
     34 
     35   TabSpecificContentSettings* GetActiveTabSpecificContentSettings() {
     36     return TabSpecificContentSettings::FromWebContents(
     37         browser()->tab_strip_model()->GetActiveWebContents());
     38   }
     39 
     40   scoped_ptr<net::SpawnedTestServer> https_server_;
     41 };
     42 
     43 // Tests that a MIXEDSCRIPT type ContentSettingBubbleModel sends appropriate
     44 // IPCs to allow the renderer to load unsafe scripts and refresh the page
     45 // automatically.
     46 IN_PROC_BROWSER_TEST_F(ContentSettingBubbleModelMixedScriptTest, MainFrame) {
     47   GURL url(https_server_->GetURL(
     48       "files/content_setting_bubble/mixed_script.html"));
     49 
     50   // Load a page with mixed content and do quick verification by looking at
     51   // the title string.
     52   ui_test_utils::NavigateToURL(browser(), url);
     53 
     54   EXPECT_TRUE(GetActiveTabSpecificContentSettings()->IsContentBlocked(
     55       CONTENT_SETTINGS_TYPE_MIXEDSCRIPT));
     56 
     57   // Emulate link clicking on the mixed script bubble.
     58   scoped_ptr<ContentSettingBubbleModel> model(
     59       ContentSettingBubbleModel::CreateContentSettingBubbleModel(
     60           browser()->content_setting_bubble_model_delegate(),
     61           browser()->tab_strip_model()->GetActiveWebContents(),
     62           browser()->profile(),
     63           CONTENT_SETTINGS_TYPE_MIXEDSCRIPT));
     64   model->OnCustomLinkClicked();
     65 
     66   // Wait for reload
     67   content::TestNavigationObserver observer(
     68       browser()->tab_strip_model()->GetActiveWebContents());
     69   observer.Wait();
     70 
     71   EXPECT_FALSE(GetActiveTabSpecificContentSettings()->IsContentBlocked(
     72       CONTENT_SETTINGS_TYPE_MIXEDSCRIPT));
     73 }
     74 
     75 // Tests that a MIXEDSCRIPT type ContentSettingBubbleModel works for an iframe.
     76 IN_PROC_BROWSER_TEST_F(ContentSettingBubbleModelMixedScriptTest, Iframe) {
     77   GURL url(https_server_->GetURL(
     78       "files/content_setting_bubble/mixed_script_in_iframe.html"));
     79 
     80   ui_test_utils::NavigateToURL(browser(), url);
     81 
     82   EXPECT_TRUE(GetActiveTabSpecificContentSettings()->IsContentBlocked(
     83       CONTENT_SETTINGS_TYPE_MIXEDSCRIPT));
     84 
     85   scoped_ptr<ContentSettingBubbleModel> model(
     86       ContentSettingBubbleModel::CreateContentSettingBubbleModel(
     87           browser()->content_setting_bubble_model_delegate(),
     88           browser()->tab_strip_model()->GetActiveWebContents(),
     89           browser()->profile(),
     90           CONTENT_SETTINGS_TYPE_MIXEDSCRIPT));
     91   model->OnCustomLinkClicked();
     92 
     93   content::TestNavigationObserver observer(
     94       browser()->tab_strip_model()->GetActiveWebContents());
     95   observer.Wait();
     96 
     97   EXPECT_FALSE(GetActiveTabSpecificContentSettings()->IsContentBlocked(
     98       CONTENT_SETTINGS_TYPE_MIXEDSCRIPT));
     99 }
    100