| 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/chrome_content_browser_client.h" | 5 #include "chrome/browser/chrome_content_browser_client.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1415 return true; | 1415 return true; |
| 1416 | 1416 |
| 1417 // Otherwise, swap BrowsingInstances if current_extension and new_extension | 1417 // Otherwise, swap BrowsingInstances if current_extension and new_extension |
| 1418 // differ. | 1418 // differ. |
| 1419 return current_extension != new_extension; | 1419 return current_extension != new_extension; |
| 1420 } | 1420 } |
| 1421 | 1421 |
| 1422 bool ChromeContentBrowserClient::ShouldSwapProcessesForRedirect( | 1422 bool ChromeContentBrowserClient::ShouldSwapProcessesForRedirect( |
| 1423 content::ResourceContext* resource_context, const GURL& current_url, | 1423 content::ResourceContext* resource_context, const GURL& current_url, |
| 1424 const GURL& new_url) { | 1424 const GURL& new_url) { |
| 1425 #if defined(ENABLE_EXTENSIONS) |
| 1425 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); | 1426 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); |
| 1426 return extensions::CrossesExtensionProcessBoundary( | 1427 return extensions::CrossesExtensionProcessBoundary( |
| 1427 io_data->GetExtensionInfoMap()->extensions(), | 1428 io_data->GetExtensionInfoMap()->extensions(), |
| 1428 current_url, new_url, false); | 1429 current_url, new_url, false); |
| 1430 #else |
| 1431 return false; |
| 1432 #endif |
| 1429 } | 1433 } |
| 1430 | 1434 |
| 1431 bool ChromeContentBrowserClient::ShouldAssignSiteForURL(const GURL& url) { | 1435 bool ChromeContentBrowserClient::ShouldAssignSiteForURL(const GURL& url) { |
| 1432 return !url.SchemeIs(chrome::kChromeNativeScheme); | 1436 return !url.SchemeIs(chrome::kChromeNativeScheme); |
| 1433 } | 1437 } |
| 1434 | 1438 |
| 1435 std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( | 1439 std::string ChromeContentBrowserClient::GetCanonicalEncodingNameByAliasName( |
| 1436 const std::string& alias_name) { | 1440 const std::string& alias_name) { |
| 1437 return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); | 1441 return CharacterEncoding::GetCanonicalEncodingNameByAliasName(alias_name); |
| 1438 } | 1442 } |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1863 | 1867 |
| 1864 process_map.insert(std::pair<int, int>(i->first, i->second)); | 1868 process_map.insert(std::pair<int, int>(i->first, i->second)); |
| 1865 | 1869 |
| 1866 if (WebViewRendererState::GetInstance()->IsGuest(i->first)) | 1870 if (WebViewRendererState::GetInstance()->IsGuest(i->first)) |
| 1867 has_web_view_guest = true; | 1871 has_web_view_guest = true; |
| 1868 } | 1872 } |
| 1869 if (!has_web_view_guest) { | 1873 if (!has_web_view_guest) { |
| 1870 FileSystemAccessed(url, render_frames, callback, allow); | 1874 FileSystemAccessed(url, render_frames, callback, allow); |
| 1871 return; | 1875 return; |
| 1872 } | 1876 } |
| 1873 DCHECK(process_map.size() == 1); | 1877 DCHECK_EQ(1U, process_map.size()); |
| 1874 it = process_map.begin(); | 1878 it = process_map.begin(); |
| 1875 BrowserThread::PostTask( | 1879 BrowserThread::PostTask( |
| 1876 BrowserThread::UI, | 1880 BrowserThread::UI, |
| 1877 FROM_HERE, | 1881 FROM_HERE, |
| 1878 base::Bind(&ChromeContentBrowserClient:: | 1882 base::Bind(&ChromeContentBrowserClient:: |
| 1879 RequestFileSystemPermissionOnUIThread, | 1883 RequestFileSystemPermissionOnUIThread, |
| 1880 it->first, | 1884 it->first, |
| 1881 it->second, | 1885 it->second, |
| 1882 url, | 1886 url, |
| 1883 allow, | 1887 allow, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1940 i->first, i->second, url, name, !allow)); | 1944 i->first, i->second, url, name, !allow)); |
| 1941 } | 1945 } |
| 1942 | 1946 |
| 1943 return allow; | 1947 return allow; |
| 1944 } | 1948 } |
| 1945 | 1949 |
| 1946 net::URLRequestContext* | 1950 net::URLRequestContext* |
| 1947 ChromeContentBrowserClient::OverrideRequestContextForURL( | 1951 ChromeContentBrowserClient::OverrideRequestContextForURL( |
| 1948 const GURL& url, content::ResourceContext* context) { | 1952 const GURL& url, content::ResourceContext* context) { |
| 1949 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 1953 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 1954 #if defined(ENABLE_EXTENSIONS) |
| 1950 if (url.SchemeIs(extensions::kExtensionScheme)) { | 1955 if (url.SchemeIs(extensions::kExtensionScheme)) { |
| 1951 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); | 1956 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); |
| 1952 return io_data->extensions_request_context(); | 1957 return io_data->extensions_request_context(); |
| 1953 } | 1958 } |
| 1959 #endif |
| 1954 | 1960 |
| 1955 return NULL; | 1961 return NULL; |
| 1956 } | 1962 } |
| 1957 | 1963 |
| 1958 QuotaPermissionContext* | 1964 QuotaPermissionContext* |
| 1959 ChromeContentBrowserClient::CreateQuotaPermissionContext() { | 1965 ChromeContentBrowserClient::CreateQuotaPermissionContext() { |
| 1960 return new ChromeQuotaPermissionContext(); | 1966 return new ChromeQuotaPermissionContext(); |
| 1961 } | 1967 } |
| 1962 | 1968 |
| 1963 void ChromeContentBrowserClient::AllowCertificateError( | 1969 void ChromeContentBrowserClient::AllowCertificateError( |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2249 bool user_gesture, | 2255 bool user_gesture, |
| 2250 bool opener_suppressed, | 2256 bool opener_suppressed, |
| 2251 content::ResourceContext* context, | 2257 content::ResourceContext* context, |
| 2252 int render_process_id, | 2258 int render_process_id, |
| 2253 int opener_id, | 2259 int opener_id, |
| 2254 bool* no_javascript_access) { | 2260 bool* no_javascript_access) { |
| 2255 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 2261 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 2256 | 2262 |
| 2257 *no_javascript_access = false; | 2263 *no_javascript_access = false; |
| 2258 | 2264 |
| 2259 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); | |
| 2260 InfoMap* map = io_data->GetExtensionInfoMap(); | |
| 2261 | |
| 2262 // If the opener is trying to create a background window but doesn't have | 2265 // If the opener is trying to create a background window but doesn't have |
| 2263 // the appropriate permission, fail the attempt. | 2266 // the appropriate permission, fail the attempt. |
| 2264 if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { | 2267 if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { |
| 2268 #if defined(ENABLE_EXTENSIONS) |
| 2269 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); |
| 2270 InfoMap* map = io_data->GetExtensionInfoMap(); |
| 2265 if (!map->SecurityOriginHasAPIPermission( | 2271 if (!map->SecurityOriginHasAPIPermission( |
| 2266 source_origin, | 2272 source_origin, |
| 2267 render_process_id, | 2273 render_process_id, |
| 2268 APIPermission::kBackground)) { | 2274 APIPermission::kBackground)) { |
| 2269 return false; | 2275 return false; |
| 2270 } | 2276 } |
| 2271 | 2277 |
| 2272 // Note: this use of GetExtensionOrAppByURL is safe but imperfect. It may | 2278 // Note: this use of GetExtensionOrAppByURL is safe but imperfect. It may |
| 2273 // return a recently installed Extension even if this CanCreateWindow call | 2279 // return a recently installed Extension even if this CanCreateWindow call |
| 2274 // was made by an old copy of the page in a normal web process. That's ok, | 2280 // was made by an old copy of the page in a normal web process. That's ok, |
| 2275 // because the permission check above would have caused an early return | 2281 // because the permission check above would have caused an early return |
| 2276 // already. We must use the full URL to find hosted apps, though, and not | 2282 // already. We must use the full URL to find hosted apps, though, and not |
| 2277 // just the origin. | 2283 // just the origin. |
| 2278 const Extension* extension = | 2284 const Extension* extension = |
| 2279 map->extensions().GetExtensionOrAppByURL(opener_url); | 2285 map->extensions().GetExtensionOrAppByURL(opener_url); |
| 2280 if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) | 2286 if (extension && !extensions::BackgroundInfo::AllowJSAccess(extension)) |
| 2281 *no_javascript_access = true; | 2287 *no_javascript_access = true; |
| 2288 #endif |
| 2282 | 2289 |
| 2283 return true; | 2290 return true; |
| 2284 } | 2291 } |
| 2285 | 2292 |
| 2286 #if defined(ENABLE_EXTENSIONS) | 2293 #if defined(ENABLE_EXTENSIONS) |
| 2287 if (WebViewRendererState::GetInstance()->IsGuest(render_process_id)) | 2294 if (WebViewRendererState::GetInstance()->IsGuest(render_process_id)) |
| 2288 return true; | 2295 return true; |
| 2289 #endif | 2296 #endif |
| 2290 | 2297 |
| 2291 HostContentSettingsMap* content_settings = | 2298 HostContentSettingsMap* content_settings = |
| 2292 ProfileIOData::FromResourceContext(context)->GetHostContentSettingsMap(); | 2299 ProfileIOData::FromResourceContext(context)->GetHostContentSettingsMap(); |
| 2293 BlockedWindowParams blocked_params(target_url, | 2300 BlockedWindowParams blocked_params(target_url, |
| 2294 referrer, | 2301 referrer, |
| 2295 disposition, | 2302 disposition, |
| 2296 features, | 2303 features, |
| 2297 user_gesture, | 2304 user_gesture, |
| 2298 opener_suppressed, | 2305 opener_suppressed, |
| 2299 render_process_id, | 2306 render_process_id, |
| 2300 opener_id); | 2307 opener_id); |
| 2301 | 2308 |
| 2302 if (!user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch( | 2309 if (!user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch( |
| 2303 switches::kDisablePopupBlocking)) { | 2310 switches::kDisablePopupBlocking)) { |
| 2304 if (content_settings->GetContentSetting(opener_top_level_frame_url, | 2311 if (content_settings->GetContentSetting(opener_top_level_frame_url, |
| 2305 opener_top_level_frame_url, | 2312 opener_top_level_frame_url, |
| 2306 CONTENT_SETTINGS_TYPE_POPUPS, | 2313 CONTENT_SETTINGS_TYPE_POPUPS, |
| 2307 std::string()) != | 2314 std::string()) != |
| 2308 CONTENT_SETTING_ALLOW) { | 2315 CONTENT_SETTING_ALLOW) { |
| 2309 BrowserThread::PostTask(BrowserThread::UI, | 2316 BrowserThread::PostTask(BrowserThread::UI, |
| 2310 FROM_HERE, | 2317 FROM_HERE, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2323 return false; | 2330 return false; |
| 2324 } | 2331 } |
| 2325 #endif | 2332 #endif |
| 2326 | 2333 |
| 2327 return true; | 2334 return true; |
| 2328 } | 2335 } |
| 2329 | 2336 |
| 2330 std::string ChromeContentBrowserClient::GetWorkerProcessTitle( | 2337 std::string ChromeContentBrowserClient::GetWorkerProcessTitle( |
| 2331 const GURL& url, content::ResourceContext* context) { | 2338 const GURL& url, content::ResourceContext* context) { |
| 2332 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 2339 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 2340 #if defined(ENABLE_EXTENSIONS) |
| 2333 // Check if it's an extension-created worker, in which case we want to use | 2341 // Check if it's an extension-created worker, in which case we want to use |
| 2334 // the name of the extension. | 2342 // the name of the extension. |
| 2335 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); | 2343 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); |
| 2336 const Extension* extension = | 2344 const Extension* extension = |
| 2337 io_data->GetExtensionInfoMap()->extensions().GetByID(url.host()); | 2345 io_data->GetExtensionInfoMap()->extensions().GetByID(url.host()); |
| 2338 return extension ? extension->name() : std::string(); | 2346 return extension ? extension->name() : std::string(); |
| 2347 #else |
| 2348 return std::string(); |
| 2349 #endif |
| 2339 } | 2350 } |
| 2340 | 2351 |
| 2341 void ChromeContentBrowserClient::ResourceDispatcherHostCreated() { | 2352 void ChromeContentBrowserClient::ResourceDispatcherHostCreated() { |
| 2342 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 2353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 2343 prerender_tracker_ = g_browser_process->prerender_tracker(); | 2354 prerender_tracker_ = g_browser_process->prerender_tracker(); |
| 2344 return g_browser_process->ResourceDispatcherHostCreated(); | 2355 return g_browser_process->ResourceDispatcherHostCreated(); |
| 2345 } | 2356 } |
| 2346 | 2357 |
| 2347 // TODO(tommi): Rename from Get to Create. | 2358 // TODO(tommi): Rename from Get to Create. |
| 2348 content::SpeechRecognitionManagerDelegate* | 2359 content::SpeechRecognitionManagerDelegate* |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2896 switches::kDisableWebRtcEncryption, | 2907 switches::kDisableWebRtcEncryption, |
| 2897 }; | 2908 }; |
| 2898 to_command_line->CopySwitchesFrom(from_command_line, | 2909 to_command_line->CopySwitchesFrom(from_command_line, |
| 2899 kWebRtcDevSwitchNames, | 2910 kWebRtcDevSwitchNames, |
| 2900 arraysize(kWebRtcDevSwitchNames)); | 2911 arraysize(kWebRtcDevSwitchNames)); |
| 2901 } | 2912 } |
| 2902 } | 2913 } |
| 2903 #endif // defined(ENABLE_WEBRTC) | 2914 #endif // defined(ENABLE_WEBRTC) |
| 2904 | 2915 |
| 2905 } // namespace chrome | 2916 } // namespace chrome |
| OLD | NEW |