diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-28 04:09:50 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-28 04:09:50 +0000 |
commit | c5f51194ca9eedb64337e79567759e2307053d28 (patch) | |
tree | 3b8c468cf77da2224924620e03f914aed906db7f /chrome/browser/content_settings | |
parent | f65809c9dc3918c8907e412721d9512025a01b83 (diff) | |
download | chromium_src-c5f51194ca9eedb64337e79567759e2307053d28.zip chromium_src-c5f51194ca9eedb64337e79567759e2307053d28.tar.gz chromium_src-c5f51194ca9eedb64337e79567759e2307053d28.tar.bz2 |
Switch TabSpecificContentSettings to use WebContentsUserData.
BUG=107201
TEST=no visible change
Review URL: https://chromiumcodereview.appspot.com/10969023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159199 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/content_settings')
4 files changed, 139 insertions, 128 deletions
diff --git a/chrome/browser/content_settings/content_settings_browsertest.cc b/chrome/browser/content_settings/content_settings_browsertest.cc index d0b341f..ce32300 100644 --- a/chrome/browser/content_settings/content_settings_browsertest.cc +++ b/chrome/browser/content_settings/content_settings_browsertest.cc @@ -233,12 +233,12 @@ IN_PROC_BROWSER_TEST_F(ContentSettingsTest, RedirectLoopCookies) { ui_test_utils::NavigateToURL(browser(), test_url); - TabContents* tab_contents = chrome::GetActiveTabContents(browser()); + content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); ASSERT_EQ(UTF8ToUTF16(test_url.spec() + " failed to load"), - tab_contents->web_contents()->GetTitle()); + web_contents->GetTitle()); - EXPECT_TRUE(tab_contents->content_settings()->IsContentBlocked( - CONTENT_SETTINGS_TYPE_COOKIES)); + EXPECT_TRUE(TabSpecificContentSettings::FromWebContents(web_contents)-> + IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); } IN_PROC_BROWSER_TEST_F(ContentSettingsTest, ContentSettingsBlockDataURLs) { @@ -249,11 +249,11 @@ IN_PROC_BROWSER_TEST_F(ContentSettingsTest, ContentSettingsBlockDataURLs) { ui_test_utils::NavigateToURL(browser(), url); - TabContents* tab_contents = chrome::GetActiveTabContents(browser()); - ASSERT_EQ(UTF8ToUTF16("Data URL"), tab_contents->web_contents()->GetTitle()); + content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); + ASSERT_EQ(UTF8ToUTF16("Data URL"), web_contents->GetTitle()); - EXPECT_TRUE(tab_contents->content_settings()->IsContentBlocked( - CONTENT_SETTINGS_TYPE_JAVASCRIPT)); + EXPECT_TRUE(TabSpecificContentSettings::FromWebContents(web_contents)-> + IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); } // Tests that if redirect across origins occurs, the new process still gets the @@ -274,10 +274,10 @@ IN_PROC_BROWSER_TEST_F(ContentSettingsTest, RedirectCrossOrigin) { ui_test_utils::NavigateToURL(browser(), test_url); - TabContents* tab_contents = chrome::GetActiveTabContents(browser()); + content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); - EXPECT_TRUE(tab_contents->content_settings()->IsContentBlocked( - CONTENT_SETTINGS_TYPE_COOKIES)); + EXPECT_TRUE(TabSpecificContentSettings::FromWebContents(web_contents)-> + IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); } #if !defined(USE_AURA) // No NPAPI plugins with Aura. diff --git a/chrome/browser/content_settings/tab_specific_content_settings.cc b/chrome/browser/content_settings/tab_specific_content_settings.cc index 6500c17..4668465 100644 --- a/chrome/browser/content_settings/tab_specific_content_settings.cc +++ b/chrome/browser/content_settings/tab_specific_content_settings.cc @@ -40,10 +40,9 @@ using content::NavigationEntry; using content::RenderViewHost; using content::WebContents; +DEFINE_WEB_CONTENTS_USER_DATA_KEY(TabSpecificContentSettings) + namespace { -typedef std::list<TabSpecificContentSettings*> TabSpecificList; -static base::LazyInstance<TabSpecificList> g_tab_specific = - LAZY_INSTANCE_INITIALIZER; class InterstitialHostObserver : public content::RenderViewHostObserver { public: @@ -57,7 +56,7 @@ class InterstitialHostObserver : public content::RenderViewHostObserver { } }; -} +} // namespace TabSpecificContentSettings::SiteDataObserver::SiteDataObserver( TabSpecificContentSettings* tab_specific_content_settings) @@ -86,7 +85,6 @@ TabSpecificContentSettings::TabSpecificContentSettings(WebContents* tab) load_plugins_link_enabled_(true) { ClearBlockedContentSettingsExceptForCookies(); ClearCookieSpecificContentSettings(); - g_tab_specific.Get().push_back(this); registrar_.Add(this, chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED, content::Source<HostContentSettingsMap>( @@ -96,26 +94,19 @@ TabSpecificContentSettings::TabSpecificContentSettings(WebContents* tab) TabSpecificContentSettings::~TabSpecificContentSettings() { FOR_EACH_OBSERVER( SiteDataObserver, observer_list_, ContentSettingsDestroyed()); - g_tab_specific.Get().remove(this); } TabSpecificContentSettings* TabSpecificContentSettings::Get( int render_process_id, int render_view_id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - RenderViewHost* view = RenderViewHost::FromID( - render_process_id, render_view_id); + + RenderViewHost* view = RenderViewHost::FromID(render_process_id, + render_view_id); if (!view) return NULL; - // We loop through the tab contents and compare them with |view|, instead of - // getting the RVH from each tab contents and comparing its IDs because the - // latter will miss provisional RenderViewHosts. - for (TabSpecificList::iterator i = g_tab_specific.Get().begin(); - i != g_tab_specific.Get().end(); ++i) { - if (WebContents::FromRenderViewHost(view) == (*i)->web_contents()) - return (*i); - } - return NULL; + return TabSpecificContentSettings::FromWebContents( + WebContents::FromRenderViewHost(view)); } // static diff --git a/chrome/browser/content_settings/tab_specific_content_settings.h b/chrome/browser/content_settings/tab_specific_content_settings.h index 0781e6a..89e303f 100644 --- a/chrome/browser/content_settings/tab_specific_content_settings.h +++ b/chrome/browser/content_settings/tab_specific_content_settings.h @@ -12,6 +12,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" +#include "chrome/browser/common/web_contents_user_data.h" #include "chrome/browser/content_settings/local_shared_objects_container.h" #include "chrome/browser/geolocation/geolocation_settings_state.h" #include "chrome/common/content_settings.h" @@ -33,8 +34,10 @@ namespace net { class CookieOptions; } -class TabSpecificContentSettings : public content::WebContentsObserver, - public content::NotificationObserver { +class TabSpecificContentSettings + : public content::WebContentsObserver, + public content::NotificationObserver, + public WebContentsUserData<TabSpecificContentSettings> { public: // Classes that want to be notified about site data events must implement // this abstract class and add themselves as observer to the @@ -62,8 +65,6 @@ class TabSpecificContentSettings : public content::WebContentsObserver, DISALLOW_COPY_AND_ASSIGN(SiteDataObserver); }; - explicit TabSpecificContentSettings(content::WebContents* tab); - virtual ~TabSpecificContentSettings(); // Returns the object given a render view's id. @@ -279,6 +280,9 @@ class TabSpecificContentSettings : public content::WebContentsObserver, void RemoveSiteDataObserver(SiteDataObserver* observer); private: + explicit TabSpecificContentSettings(content::WebContents* tab); + friend class WebContentsUserData<TabSpecificContentSettings>; + void AddBlockedResource(ContentSettingsType content_type, const std::string& resource_identifier); diff --git a/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc b/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc index 922c06b..4e8077c 100644 --- a/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc +++ b/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc @@ -41,6 +41,11 @@ class TabSpecificContentSettingsTest : public ChromeRenderViewHostTestHarness { TabSpecificContentSettingsTest() : browser_thread_(BrowserThread::UI, &message_loop_) {} + virtual void SetUp() OVERRIDE { + ChromeRenderViewHostTestHarness::SetUp(); + TabSpecificContentSettings::CreateForWebContents(contents()); + } + private: content::TestBrowserThread browser_thread_; @@ -48,166 +53,177 @@ class TabSpecificContentSettingsTest : public ChromeRenderViewHostTestHarness { }; TEST_F(TabSpecificContentSettingsTest, BlockedContent) { - TabSpecificContentSettings content_settings(contents()); + TabSpecificContentSettings* content_settings = + TabSpecificContentSettings::FromWebContents(contents()); net::CookieOptions options; // Check that after initializing, nothing is blocked. - EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); + EXPECT_FALSE( + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); + EXPECT_FALSE( + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); - EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); // Set a cookie, block access to images, block a popup. - content_settings.OnCookieChanged(GURL("http://google.com"), - GURL("http://google.com"), - "A=B", - options, - false); - content_settings.OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, - std::string()); - content_settings.SetPopupsBlocked(true); + content_settings->OnCookieChanged(GURL("http://google.com"), + GURL("http://google.com"), + "A=B", + options, + false); + content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, + std::string()); + content_settings->SetPopupsBlocked(true); // Check that only the respective content types are affected. - EXPECT_TRUE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); + EXPECT_TRUE(content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); - EXPECT_TRUE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); - content_settings.OnCookieChanged(GURL("http://google.com"), - GURL("http://google.com"), - "A=B", - options, - false); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + EXPECT_TRUE(content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); + content_settings->OnCookieChanged(GURL("http://google.com"), + GURL("http://google.com"), + "A=B", + options, + false); // Block a cookie. - content_settings.OnCookieChanged(GURL("http://google.com"), - GURL("http://google.com"), - "C=D", - options, - true); + content_settings->OnCookieChanged(GURL("http://google.com"), + GURL("http://google.com"), + "C=D", + options, + true); EXPECT_TRUE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); // Reset blocked content settings. - content_settings.ClearBlockedContentSettingsExceptForCookies(); - EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); + content_settings->ClearBlockedContentSettingsExceptForCookies(); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); + EXPECT_FALSE( + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); EXPECT_TRUE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); - EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + EXPECT_FALSE( + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); - content_settings.ClearCookieSpecificContentSettings(); - EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); + content_settings->ClearCookieSpecificContentSettings(); + EXPECT_FALSE( + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES)); + EXPECT_FALSE( + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); - EXPECT_FALSE(content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS)); } TEST_F(TabSpecificContentSettingsTest, BlockedFileSystems) { - TabSpecificContentSettings content_settings(contents()); + TabSpecificContentSettings* content_settings = + TabSpecificContentSettings::FromWebContents(contents()); // Access a file system. - content_settings.OnFileSystemAccessed(GURL("http://google.com"), false); + content_settings->OnFileSystemAccessed(GURL("http://google.com"), false); EXPECT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); // Block access to a file system. - content_settings.OnFileSystemAccessed(GURL("http://google.com"), true); + content_settings->OnFileSystemAccessed(GURL("http://google.com"), true); EXPECT_TRUE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); } TEST_F(TabSpecificContentSettingsTest, AllowedContent) { - TabSpecificContentSettings content_settings(contents()); + TabSpecificContentSettings* content_settings = + TabSpecificContentSettings::FromWebContents(contents()); net::CookieOptions options; ASSERT_FALSE( - content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_IMAGES)); + content_settings->IsContentAccessed(CONTENT_SETTINGS_TYPE_IMAGES)); ASSERT_FALSE( - content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); ASSERT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); - content_settings.OnCookieChanged(GURL("http://google.com"), - GURL("http://google.com"), - "A=B", - options, - false); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->OnCookieChanged(GURL("http://google.com"), + GURL("http://google.com"), + "A=B", + options, + false); ASSERT_TRUE( - content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); ASSERT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); - content_settings.OnCookieChanged(GURL("http://google.com"), - GURL("http://google.com"), - "C=D", - options, - true); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->OnCookieChanged(GURL("http://google.com"), + GURL("http://google.com"), + "C=D", + options, + true); ASSERT_TRUE( - content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); ASSERT_TRUE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); } TEST_F(TabSpecificContentSettingsTest, EmptyCookieList) { - TabSpecificContentSettings content_settings(contents()); + TabSpecificContentSettings* content_settings = + TabSpecificContentSettings::FromWebContents(contents()); ASSERT_FALSE( - content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); ASSERT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); - content_settings.OnCookiesRead(GURL("http://google.com"), - GURL("http://google.com"), - net::CookieList(), - true); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->OnCookiesRead(GURL("http://google.com"), + GURL("http://google.com"), + net::CookieList(), + true); ASSERT_FALSE( - content_settings.IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentAccessed(CONTENT_SETTINGS_TYPE_COOKIES)); ASSERT_FALSE( - content_settings.IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); + content_settings->IsContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES)); } TEST_F(TabSpecificContentSettingsTest, SiteDataObserver) { - TabSpecificContentSettings content_settings(contents()); - MockSiteDataObserver mock_observer(&content_settings); + TabSpecificContentSettings* content_settings = + TabSpecificContentSettings::FromWebContents(contents()); + MockSiteDataObserver mock_observer(content_settings); EXPECT_CALL(mock_observer, OnSiteDataAccessed()).Times(6); bool blocked_by_policy = false; - content_settings.OnCookieChanged(GURL("http://google.com"), - GURL("http://google.com"), - "A=B", - net::CookieOptions(), - blocked_by_policy); + content_settings->OnCookieChanged(GURL("http://google.com"), + GURL("http://google.com"), + "A=B", + net::CookieOptions(), + blocked_by_policy); net::CookieList cookie_list; net::ParsedCookie parsed_cookie("CookieName=CookieValue"); scoped_ptr<net::CanonicalCookie> cookie( net::CanonicalCookie::Create(GURL("http://google.com"), parsed_cookie)); cookie_list.push_back(*cookie); - content_settings.OnCookiesRead(GURL("http://google.com"), - GURL("http://google.com"), - cookie_list, - blocked_by_policy); - content_settings.OnFileSystemAccessed(GURL("http://google.com"), - blocked_by_policy); - content_settings.OnIndexedDBAccessed(GURL("http://google.com"), - UTF8ToUTF16("text"), - blocked_by_policy); - content_settings.OnLocalStorageAccessed(GURL("http://google.com"), - true, + content_settings->OnCookiesRead(GURL("http://google.com"), + GURL("http://google.com"), + cookie_list, + blocked_by_policy); + content_settings->OnFileSystemAccessed(GURL("http://google.com"), + blocked_by_policy); + content_settings->OnIndexedDBAccessed(GURL("http://google.com"), + UTF8ToUTF16("text"), + blocked_by_policy); + content_settings->OnLocalStorageAccessed(GURL("http://google.com"), + true, + blocked_by_policy); + content_settings->OnWebDatabaseAccessed(GURL("http://google.com"), + UTF8ToUTF16("name"), + UTF8ToUTF16("display_name"), blocked_by_policy); - content_settings.OnWebDatabaseAccessed(GURL("http://google.com"), - UTF8ToUTF16("name"), - UTF8ToUTF16("display_name"), - blocked_by_policy); } |