OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 5 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "chrome/browser/content_settings/content_settings_utils.h" | 21 #include "chrome/browser/content_settings/content_settings_utils.h" |
22 #include "chrome/browser/content_settings/host_content_settings_map.h" | 22 #include "chrome/browser/content_settings/host_content_settings_map.h" |
23 #include "chrome/browser/profiles/profile.h" | 23 #include "chrome/browser/profiles/profile.h" |
24 #include "chrome/common/chrome_switches.h" | 24 #include "chrome/common/chrome_switches.h" |
25 #include "chrome/common/render_messages.h" | 25 #include "chrome/common/render_messages.h" |
26 #include "content/public/browser/browser_thread.h" | 26 #include "content/public/browser/browser_thread.h" |
27 #include "content/public/browser/navigation_controller.h" | 27 #include "content/public/browser/navigation_controller.h" |
28 #include "content/public/browser/navigation_details.h" | 28 #include "content/public/browser/navigation_details.h" |
29 #include "content/public/browser/navigation_entry.h" | 29 #include "content/public/browser/navigation_entry.h" |
30 #include "content/public/browser/notification_service.h" | 30 #include "content/public/browser/notification_service.h" |
| 31 #include "content/public/browser/render_frame_host.h" |
31 #include "content/public/browser/render_view_host.h" | 32 #include "content/public/browser/render_view_host.h" |
32 #include "content/public/browser/web_contents.h" | 33 #include "content/public/browser/web_contents.h" |
33 #include "content/public/browser/web_contents_delegate.h" | 34 #include "content/public/browser/web_contents_delegate.h" |
34 #include "net/cookies/canonical_cookie.h" | 35 #include "net/cookies/canonical_cookie.h" |
35 #include "webkit/common/fileapi/file_system_types.h" | 36 #include "webkit/common/fileapi/file_system_types.h" |
36 | 37 |
37 using content::BrowserThread; | 38 using content::BrowserThread; |
38 using content::NavigationController; | 39 using content::NavigationController; |
39 using content::NavigationEntry; | 40 using content::NavigationEntry; |
40 using content::RenderViewHost; | 41 using content::RenderViewHost; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 if (!view) | 91 if (!view) |
91 return NULL; | 92 return NULL; |
92 | 93 |
93 WebContents* web_contents = WebContents::FromRenderViewHost(view); | 94 WebContents* web_contents = WebContents::FromRenderViewHost(view); |
94 if (!web_contents) | 95 if (!web_contents) |
95 return NULL; | 96 return NULL; |
96 | 97 |
97 return TabSpecificContentSettings::FromWebContents(web_contents); | 98 return TabSpecificContentSettings::FromWebContents(web_contents); |
98 } | 99 } |
99 | 100 |
| 101 TabSpecificContentSettings* TabSpecificContentSettings::GetForFrame( |
| 102 int render_process_id, int render_frame_id) { |
| 103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 104 |
| 105 content::RenderFrameHost* frame = content::RenderFrameHost::FromID( |
| 106 render_process_id, render_frame_id); |
| 107 if (!frame) |
| 108 return NULL; |
| 109 |
| 110 WebContents* web_contents = WebContents::FromRenderFrameHost(frame); |
| 111 if (!web_contents) |
| 112 return NULL; |
| 113 |
| 114 return TabSpecificContentSettings::FromWebContents(web_contents); |
| 115 } |
| 116 |
100 // static | 117 // static |
101 void TabSpecificContentSettings::CookiesRead(int render_process_id, | 118 void TabSpecificContentSettings::CookiesRead(int render_process_id, |
102 int render_view_id, | 119 int render_view_id, |
103 const GURL& url, | 120 const GURL& url, |
104 const GURL& frame_url, | 121 const GURL& frame_url, |
105 const net::CookieList& cookie_list, | 122 const net::CookieList& cookie_list, |
106 bool blocked_by_policy) { | 123 bool blocked_by_policy) { |
107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 124 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
108 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); | 125 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); |
109 if (settings) { | 126 if (settings) { |
(...skipping 14 matching lines...) Expand all Loading... |
124 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 141 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
125 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); | 142 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); |
126 if (settings) | 143 if (settings) |
127 settings->OnCookieChanged(url, frame_url, cookie_line, options, | 144 settings->OnCookieChanged(url, frame_url, cookie_line, options, |
128 blocked_by_policy); | 145 blocked_by_policy); |
129 } | 146 } |
130 | 147 |
131 // static | 148 // static |
132 void TabSpecificContentSettings::WebDatabaseAccessed( | 149 void TabSpecificContentSettings::WebDatabaseAccessed( |
133 int render_process_id, | 150 int render_process_id, |
134 int render_view_id, | 151 int render_frame_id, |
135 const GURL& url, | 152 const GURL& url, |
136 const base::string16& name, | 153 const base::string16& name, |
137 const base::string16& display_name, | 154 const base::string16& display_name, |
138 bool blocked_by_policy) { | 155 bool blocked_by_policy) { |
139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 156 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
140 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); | 157 TabSpecificContentSettings* settings = GetForFrame( |
| 158 render_process_id, render_frame_id); |
| 159 |
| 160 // TODO(jam): remove this once WorkerProcessHost knows the RenderFrame IDs for |
| 161 // a shared worker, which needs SharedWorkerRepository to be per frame. |
| 162 if (!settings) |
| 163 settings = Get(render_process_id, render_frame_id); |
| 164 |
141 if (settings) | 165 if (settings) |
142 settings->OnWebDatabaseAccessed(url, name, display_name, blocked_by_policy); | 166 settings->OnWebDatabaseAccessed(url, name, display_name, blocked_by_policy); |
143 } | 167 } |
144 | 168 |
145 // static | 169 // static |
146 void TabSpecificContentSettings::DOMStorageAccessed(int render_process_id, | 170 void TabSpecificContentSettings::DOMStorageAccessed(int render_process_id, |
147 int render_view_id, | 171 int render_frame_id, |
148 const GURL& url, | 172 const GURL& url, |
149 bool local, | 173 bool local, |
150 bool blocked_by_policy) { | 174 bool blocked_by_policy) { |
151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
152 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); | 176 TabSpecificContentSettings* settings = GetForFrame( |
| 177 render_process_id, render_frame_id); |
153 if (settings) | 178 if (settings) |
154 settings->OnLocalStorageAccessed(url, local, blocked_by_policy); | 179 settings->OnLocalStorageAccessed(url, local, blocked_by_policy); |
155 } | 180 } |
156 | 181 |
157 // static | 182 // static |
158 void TabSpecificContentSettings::IndexedDBAccessed(int render_process_id, | 183 void TabSpecificContentSettings::IndexedDBAccessed( |
159 int render_view_id, | 184 int render_process_id, |
160 const GURL& url, | 185 int render_frame_id, |
161 const base::string16& descrip
tion, | 186 const GURL& url, |
162 bool blocked_by_policy) { | 187 const base::string16& description, |
| 188 bool blocked_by_policy) { |
163 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 189 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
164 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); | 190 TabSpecificContentSettings* settings = GetForFrame( |
| 191 render_process_id, render_frame_id); |
| 192 |
| 193 // TODO(jam): remove this once WorkerProcessHost knows the RenderFrame IDs for |
| 194 // a shared worker, which needs SharedWorkerRepository to be per frame. |
| 195 if (!settings) |
| 196 settings = Get(render_process_id, render_frame_id); |
| 197 |
165 if (settings) | 198 if (settings) |
166 settings->OnIndexedDBAccessed(url, description, blocked_by_policy); | 199 settings->OnIndexedDBAccessed(url, description, blocked_by_policy); |
167 } | 200 } |
168 | 201 |
169 // static | 202 // static |
170 void TabSpecificContentSettings::FileSystemAccessed(int render_process_id, | 203 void TabSpecificContentSettings::FileSystemAccessed(int render_process_id, |
171 int render_view_id, | 204 int render_frame_id, |
172 const GURL& url, | 205 const GURL& url, |
173 bool blocked_by_policy) { | 206 bool blocked_by_policy) { |
174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 207 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
175 TabSpecificContentSettings* settings = Get(render_process_id, render_view_id); | 208 TabSpecificContentSettings* settings = GetForFrame( |
| 209 render_process_id, render_frame_id); |
| 210 |
| 211 // TODO(jam): remove this once WorkerProcessHost knows the RenderFrame IDs for |
| 212 // a shared worker, which needs SharedWorkerRepository to be per frame. |
| 213 if (!settings) |
| 214 settings = Get(render_process_id, render_frame_id); |
| 215 |
176 if (settings) | 216 if (settings) |
177 settings->OnFileSystemAccessed(url, blocked_by_policy); | 217 settings->OnFileSystemAccessed(url, blocked_by_policy); |
178 } | 218 } |
179 | 219 |
180 bool TabSpecificContentSettings::IsContentBlocked( | 220 bool TabSpecificContentSettings::IsContentBlocked( |
181 ContentSettingsType content_type) const { | 221 ContentSettingsType content_type) const { |
182 DCHECK(content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION) | 222 DCHECK(content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION) |
183 << "Geolocation settings handled by ContentSettingGeolocationImageModel"; | 223 << "Geolocation settings handled by ContentSettingGeolocationImageModel"; |
184 DCHECK(content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) | 224 DCHECK(content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) |
185 << "Notifications settings handled by " | 225 << "Notifications settings handled by " |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 } | 624 } |
585 | 625 |
586 void TabSpecificContentSettings::SetPepperBrokerAllowed(bool allowed) { | 626 void TabSpecificContentSettings::SetPepperBrokerAllowed(bool allowed) { |
587 if (allowed) { | 627 if (allowed) { |
588 OnContentAllowed(CONTENT_SETTINGS_TYPE_PPAPI_BROKER); | 628 OnContentAllowed(CONTENT_SETTINGS_TYPE_PPAPI_BROKER); |
589 } else { | 629 } else { |
590 OnContentBlocked(CONTENT_SETTINGS_TYPE_PPAPI_BROKER); | 630 OnContentBlocked(CONTENT_SETTINGS_TYPE_PPAPI_BROKER); |
591 } | 631 } |
592 } | 632 } |
593 | 633 |
594 void TabSpecificContentSettings::RenderViewForInterstitialPageCreated( | 634 void TabSpecificContentSettings::RenderFrameForInterstitialPageCreated( |
595 RenderViewHost* render_view_host) { | 635 content::RenderFrameHost* render_frame_host) { |
596 // We want to tell the renderer-side code to ignore content settings for this | 636 // We want to tell the renderer-side code to ignore content settings for this |
597 // page. | 637 // page. |
598 render_view_host->Send(new ChromeViewMsg_SetAsInterstitial( | 638 render_frame_host->Send(new ChromeViewMsg_SetAsInterstitial( |
599 render_view_host->GetRoutingID())); | 639 render_frame_host->GetRoutingID())); |
600 } | 640 } |
601 | 641 |
602 bool TabSpecificContentSettings::OnMessageReceived( | 642 bool TabSpecificContentSettings::OnMessageReceived( |
603 const IPC::Message& message) { | 643 const IPC::Message& message) { |
604 bool handled = true; | 644 bool handled = true; |
605 IPC_BEGIN_MESSAGE_MAP(TabSpecificContentSettings, message) | 645 IPC_BEGIN_MESSAGE_MAP(TabSpecificContentSettings, message) |
606 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ContentBlocked, OnContentBlocked) | 646 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ContentBlocked, OnContentBlocked) |
607 IPC_MESSAGE_UNHANDLED(handled = false) | 647 IPC_MESSAGE_UNHANDLED(handled = false) |
608 IPC_END_MESSAGE_MAP() | 648 IPC_END_MESSAGE_MAP() |
609 return handled; | 649 return handled; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 } | 723 } |
684 | 724 |
685 void TabSpecificContentSettings::RemoveSiteDataObserver( | 725 void TabSpecificContentSettings::RemoveSiteDataObserver( |
686 SiteDataObserver* observer) { | 726 SiteDataObserver* observer) { |
687 observer_list_.RemoveObserver(observer); | 727 observer_list_.RemoveObserver(observer); |
688 } | 728 } |
689 | 729 |
690 void TabSpecificContentSettings::NotifySiteDataObservers() { | 730 void TabSpecificContentSettings::NotifySiteDataObservers() { |
691 FOR_EACH_OBSERVER(SiteDataObserver, observer_list_, OnSiteDataAccessed()); | 731 FOR_EACH_OBSERVER(SiteDataObserver, observer_list_, OnSiteDataAccessed()); |
692 } | 732 } |
OLD | NEW |