summaryrefslogtreecommitdiffstats
path: root/chrome/browser/content_settings
diff options
context:
space:
mode:
authoravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-28 04:09:50 +0000
committeravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-28 04:09:50 +0000
commitc5f51194ca9eedb64337e79567759e2307053d28 (patch)
tree3b8c468cf77da2224924620e03f914aed906db7f /chrome/browser/content_settings
parentf65809c9dc3918c8907e412721d9512025a01b83 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/content_settings/content_settings_browsertest.cc22
-rw-r--r--chrome/browser/content_settings/tab_specific_content_settings.cc25
-rw-r--r--chrome/browser/content_settings/tab_specific_content_settings.h12
-rw-r--r--chrome/browser/content_settings/tab_specific_content_settings_unittest.cc208
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);
}