| 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 "content/browser/tab_contents/tab_contents.h" | 5 #include "content/browser/tab_contents/tab_contents.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| 11 #include "base/metrics/stats_counters.h" | 11 #include "base/metrics/stats_counters.h" |
| 12 #include "base/string16.h" | 12 #include "base/string16.h" |
| 13 #include "base/string_util.h" | 13 #include "base/string_util.h" |
| 14 #include "base/time.h" | 14 #include "base/time.h" |
| 15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 16 #include "content/browser/child_process_security_policy.h" | 16 #include "content/browser/child_process_security_policy_impl.h" |
| 17 #include "content/browser/debugger/devtools_manager_impl.h" | 17 #include "content/browser/debugger/devtools_manager_impl.h" |
| 18 #include "content/browser/download/download_stats.h" | 18 #include "content/browser/download/download_stats.h" |
| 19 #include "content/browser/download/save_package.h" | 19 #include "content/browser/download/save_package.h" |
| 20 #include "content/browser/gpu/gpu_data_manager.h" | 20 #include "content/browser/gpu/gpu_data_manager.h" |
| 21 #include "content/browser/gpu/gpu_process_host.h" | 21 #include "content/browser/gpu/gpu_process_host.h" |
| 22 #include "content/browser/host_zoom_map_impl.h" | 22 #include "content/browser/host_zoom_map_impl.h" |
| 23 #include "content/browser/in_process_webkit/session_storage_namespace.h" | 23 #include "content/browser/in_process_webkit/session_storage_namespace.h" |
| 24 #include "content/browser/intents/web_intents_dispatcher_impl.h" | 24 #include "content/browser/intents/web_intents_dispatcher_impl.h" |
| 25 #include "content/browser/load_from_memory_cache_details.h" | 25 #include "content/browser/load_from_memory_cache_details.h" |
| 26 #include "content/browser/load_notification_details.h" | 26 #include "content/browser/load_notification_details.h" |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 prefs.gl_multisampling_enabled = false; | 416 prefs.gl_multisampling_enabled = false; |
| 417 | 417 |
| 418 // Accelerated video and animation are slower than regular when using a | 418 // Accelerated video and animation are slower than regular when using a |
| 419 // software 3d rasterizer. | 419 // software 3d rasterizer. |
| 420 if (gpu_data_manager->software_rendering()) { | 420 if (gpu_data_manager->software_rendering()) { |
| 421 prefs.accelerated_video_enabled = false; | 421 prefs.accelerated_video_enabled = false; |
| 422 prefs.accelerated_animation_enabled = false; | 422 prefs.accelerated_animation_enabled = false; |
| 423 } | 423 } |
| 424 } | 424 } |
| 425 | 425 |
| 426 if (ChildProcessSecurityPolicy::GetInstance()->HasWebUIBindings( | 426 if (ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( |
| 427 rvh->process()->GetID())) { | 427 rvh->process()->GetID())) { |
| 428 prefs.loads_images_automatically = true; | 428 prefs.loads_images_automatically = true; |
| 429 prefs.javascript_enabled = true; | 429 prefs.javascript_enabled = true; |
| 430 } | 430 } |
| 431 | 431 |
| 432 prefs.is_online = !net::NetworkChangeNotifier::IsOffline(); | 432 prefs.is_online = !net::NetworkChangeNotifier::IsOffline(); |
| 433 | 433 |
| 434 // Force accelerated compositing and 2d canvas off for chrome:, about: and | 434 // Force accelerated compositing and 2d canvas off for chrome:, about: and |
| 435 // chrome-devtools: pages (unless it's specifically allowed). | 435 // chrome-devtools: pages (unless it's specifically allowed). |
| 436 if ((url.SchemeIs(chrome::kChromeDevToolsScheme) || | 436 if ((url.SchemeIs(chrome::kChromeDevToolsScheme) || |
| (...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1336 new WebIntentsDispatcherImpl(this, intent, intent_id); | 1336 new WebIntentsDispatcherImpl(this, intent, intent_id); |
| 1337 delegate_->WebIntentDispatch(this, intents_dispatcher); | 1337 delegate_->WebIntentDispatch(this, intents_dispatcher); |
| 1338 } | 1338 } |
| 1339 | 1339 |
| 1340 void TabContents::OnDidStartProvisionalLoadForFrame(int64 frame_id, | 1340 void TabContents::OnDidStartProvisionalLoadForFrame(int64 frame_id, |
| 1341 bool is_main_frame, | 1341 bool is_main_frame, |
| 1342 const GURL& opener_url, | 1342 const GURL& opener_url, |
| 1343 const GURL& url) { | 1343 const GURL& url) { |
| 1344 bool is_error_page = (url.spec() == chrome::kUnreachableWebDataURL); | 1344 bool is_error_page = (url.spec() == chrome::kUnreachableWebDataURL); |
| 1345 GURL validated_url(url); | 1345 GURL validated_url(url); |
| 1346 GetRenderViewHost()->FilterURL(ChildProcessSecurityPolicy::GetInstance(), | 1346 GetRenderViewHost()->FilterURL(ChildProcessSecurityPolicyImpl::GetInstance(), |
| 1347 GetRenderProcessHost()->GetID(), &validated_url); | 1347 GetRenderProcessHost()->GetID(), &validated_url); |
| 1348 | 1348 |
| 1349 RenderViewHost* rvh = | 1349 RenderViewHost* rvh = |
| 1350 render_manager_.pending_render_view_host() ? | 1350 render_manager_.pending_render_view_host() ? |
| 1351 render_manager_.pending_render_view_host() : GetRenderViewHost(); | 1351 render_manager_.pending_render_view_host() : GetRenderViewHost(); |
| 1352 // Notify observers about the start of the provisional load. | 1352 // Notify observers about the start of the provisional load. |
| 1353 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 1353 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 1354 DidStartProvisionalLoadForFrame(frame_id, is_main_frame, | 1354 DidStartProvisionalLoadForFrame(frame_id, is_main_frame, |
| 1355 validated_url, is_error_page, rvh)); | 1355 validated_url, is_error_page, rvh)); |
| 1356 | 1356 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1385 void TabContents::OnDidFailProvisionalLoadWithError( | 1385 void TabContents::OnDidFailProvisionalLoadWithError( |
| 1386 const ViewHostMsg_DidFailProvisionalLoadWithError_Params& params) { | 1386 const ViewHostMsg_DidFailProvisionalLoadWithError_Params& params) { |
| 1387 VLOG(1) << "Failed Provisional Load: " << params.url.possibly_invalid_spec() | 1387 VLOG(1) << "Failed Provisional Load: " << params.url.possibly_invalid_spec() |
| 1388 << ", error_code: " << params.error_code | 1388 << ", error_code: " << params.error_code |
| 1389 << ", error_description: " << params.error_description | 1389 << ", error_description: " << params.error_description |
| 1390 << ", is_main_frame: " << params.is_main_frame | 1390 << ", is_main_frame: " << params.is_main_frame |
| 1391 << ", showing_repost_interstitial: " << | 1391 << ", showing_repost_interstitial: " << |
| 1392 params.showing_repost_interstitial | 1392 params.showing_repost_interstitial |
| 1393 << ", frame_id: " << params.frame_id; | 1393 << ", frame_id: " << params.frame_id; |
| 1394 GURL validated_url(params.url); | 1394 GURL validated_url(params.url); |
| 1395 GetRenderViewHost()->FilterURL(ChildProcessSecurityPolicy::GetInstance(), | 1395 GetRenderViewHost()->FilterURL(ChildProcessSecurityPolicyImpl::GetInstance(), |
| 1396 GetRenderProcessHost()->GetID(), &validated_url); | 1396 GetRenderProcessHost()->GetID(), &validated_url); |
| 1397 | 1397 |
| 1398 if (net::ERR_ABORTED == params.error_code) { | 1398 if (net::ERR_ABORTED == params.error_code) { |
| 1399 // EVIL HACK ALERT! Ignore failed loads when we're showing interstitials. | 1399 // EVIL HACK ALERT! Ignore failed loads when we're showing interstitials. |
| 1400 // This means that the interstitial won't be torn down properly, which is | 1400 // This means that the interstitial won't be torn down properly, which is |
| 1401 // bad. But if we have an interstitial, go back to another tab type, and | 1401 // bad. But if we have an interstitial, go back to another tab type, and |
| 1402 // then load the same interstitial again, we could end up getting the first | 1402 // then load the same interstitial again, we could end up getting the first |
| 1403 // interstitial's "failed" message (as a result of the cancel) when we're on | 1403 // interstitial's "failed" message (as a result of the cancel) when we're on |
| 1404 // the second one. | 1404 // the second one. |
| 1405 // | 1405 // |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1564 maximum_zoom_percent_ = maximum_percent; | 1564 maximum_zoom_percent_ = maximum_percent; |
| 1565 temporary_zoom_settings_ = !remember; | 1565 temporary_zoom_settings_ = !remember; |
| 1566 } | 1566 } |
| 1567 | 1567 |
| 1568 void TabContents::OnSaveURL(const GURL& url) { | 1568 void TabContents::OnSaveURL(const GURL& url) { |
| 1569 SaveURL(url, GetURL()); | 1569 SaveURL(url, GetURL()); |
| 1570 } | 1570 } |
| 1571 | 1571 |
| 1572 void TabContents::OnEnumerateDirectory(int request_id, | 1572 void TabContents::OnEnumerateDirectory(int request_id, |
| 1573 const FilePath& path) { | 1573 const FilePath& path) { |
| 1574 delegate_->EnumerateDirectory(this, request_id, path); | 1574 ChildProcessSecurityPolicyImpl* policy = |
| 1575 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 1576 if (policy->CanReadDirectory(GetRenderProcessHost()->GetID(), path)) |
| 1577 delegate_->EnumerateDirectory(this, request_id, path); |
| 1575 } | 1578 } |
| 1576 | 1579 |
| 1577 void TabContents::OnJSOutOfMemory() { | 1580 void TabContents::OnJSOutOfMemory() { |
| 1578 delegate_->JSOutOfMemory(this); | 1581 delegate_->JSOutOfMemory(this); |
| 1579 } | 1582 } |
| 1580 | 1583 |
| 1581 void TabContents::OnRegisterProtocolHandler(const std::string& protocol, | 1584 void TabContents::OnRegisterProtocolHandler(const std::string& protocol, |
| 1582 const GURL& url, | 1585 const GURL& url, |
| 1583 const string16& title) { | 1586 const string16& title) { |
| 1587 ChildProcessSecurityPolicyImpl* policy = |
| 1588 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 1589 if (policy->IsPseudoScheme(protocol) || policy->IsDisabledScheme(protocol)) |
| 1590 return; |
| 1584 delegate_->RegisterProtocolHandler(this, protocol, url, title); | 1591 delegate_->RegisterProtocolHandler(this, protocol, url, title); |
| 1585 } | 1592 } |
| 1586 | 1593 |
| 1587 void TabContents::OnFindReply(int request_id, | 1594 void TabContents::OnFindReply(int request_id, |
| 1588 int number_of_matches, | 1595 int number_of_matches, |
| 1589 const gfx::Rect& selection_rect, | 1596 const gfx::Rect& selection_rect, |
| 1590 int active_match_ordinal, | 1597 int active_match_ordinal, |
| 1591 bool final_update) { | 1598 bool final_update) { |
| 1592 delegate_->FindReply(this, request_id, number_of_matches, selection_rect, | 1599 delegate_->FindReply(this, request_id, number_of_matches, selection_rect, |
| 1593 active_match_ordinal, final_update); | 1600 active_match_ordinal, final_update); |
| (...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2437 save_info, | 2444 save_info, |
| 2438 this); | 2445 this); |
| 2439 } | 2446 } |
| 2440 | 2447 |
| 2441 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { | 2448 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { |
| 2442 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); | 2449 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); |
| 2443 // Can be NULL during tests. | 2450 // Can be NULL during tests. |
| 2444 if (rwh_view) | 2451 if (rwh_view) |
| 2445 rwh_view->SetSize(GetView()->GetContainerSize()); | 2452 rwh_view->SetSize(GetView()->GetContainerSize()); |
| 2446 } | 2453 } |
| OLD | NEW |