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/web_contents/web_contents_impl.h" | 5 #include "content/browser/web_contents/web_contents_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
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" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 #include "content/port/browser/render_view_host_delegate_view.h" | 48 #include "content/port/browser/render_view_host_delegate_view.h" |
49 #include "content/port/browser/render_widget_host_view_port.h" | 49 #include "content/port/browser/render_widget_host_view_port.h" |
50 #include "content/public/browser/browser_context.h" | 50 #include "content/public/browser/browser_context.h" |
51 #include "content/public/browser/color_chooser.h" | 51 #include "content/public/browser/color_chooser.h" |
52 #include "content/public/browser/compositor_util.h" | 52 #include "content/public/browser/compositor_util.h" |
53 #include "content/public/browser/content_browser_client.h" | 53 #include "content/public/browser/content_browser_client.h" |
54 #include "content/public/browser/devtools_agent_host.h" | 54 #include "content/public/browser/devtools_agent_host.h" |
55 #include "content/public/browser/download_manager.h" | 55 #include "content/public/browser/download_manager.h" |
56 #include "content/public/browser/download_url_parameters.h" | 56 #include "content/public/browser/download_url_parameters.h" |
57 #include "content/public/browser/invalidate_type.h" | 57 #include "content/public/browser/invalidate_type.h" |
58 #include "content/public/browser/javascript_dialogs.h" | 58 #include "content/public/browser/javascript_dialog_manager.h" |
59 #include "content/public/browser/load_from_memory_cache_details.h" | 59 #include "content/public/browser/load_from_memory_cache_details.h" |
60 #include "content/public/browser/load_notification_details.h" | 60 #include "content/public/browser/load_notification_details.h" |
61 #include "content/public/browser/navigation_details.h" | 61 #include "content/public/browser/navigation_details.h" |
62 #include "content/public/browser/notification_details.h" | 62 #include "content/public/browser/notification_details.h" |
63 #include "content/public/browser/notification_service.h" | 63 #include "content/public/browser/notification_service.h" |
64 #include "content/public/browser/resource_request_details.h" | 64 #include "content/public/browser/resource_request_details.h" |
65 #include "content/public/browser/storage_partition.h" | 65 #include "content/public/browser/storage_partition.h" |
66 #include "content/public/browser/user_metrics.h" | 66 #include "content/public/browser/user_metrics.h" |
67 #include "content/public/browser/web_contents_delegate.h" | 67 #include "content/public/browser/web_contents_delegate.h" |
68 #include "content/public/browser/web_contents_observer.h" | 68 #include "content/public/browser/web_contents_observer.h" |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING), | 305 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING), |
306 crashed_error_code_(0), | 306 crashed_error_code_(0), |
307 waiting_for_response_(false), | 307 waiting_for_response_(false), |
308 load_state_(net::LOAD_STATE_IDLE, string16()), | 308 load_state_(net::LOAD_STATE_IDLE, string16()), |
309 upload_size_(0), | 309 upload_size_(0), |
310 upload_position_(0), | 310 upload_position_(0), |
311 displayed_insecure_content_(false), | 311 displayed_insecure_content_(false), |
312 capturing_contents_(false), | 312 capturing_contents_(false), |
313 is_being_destroyed_(false), | 313 is_being_destroyed_(false), |
314 notify_disconnection_(false), | 314 notify_disconnection_(false), |
315 dialog_creator_(NULL), | 315 dialog_manager_(NULL), |
316 is_showing_before_unload_dialog_(false), | 316 is_showing_before_unload_dialog_(false), |
317 opener_web_ui_type_(WebUI::kNoWebUI), | 317 opener_web_ui_type_(WebUI::kNoWebUI), |
318 closed_by_user_gesture_(false), | 318 closed_by_user_gesture_(false), |
319 minimum_zoom_percent_(static_cast<int>(kMinimumZoomFactor * 100)), | 319 minimum_zoom_percent_(static_cast<int>(kMinimumZoomFactor * 100)), |
320 maximum_zoom_percent_(static_cast<int>(kMaximumZoomFactor * 100)), | 320 maximum_zoom_percent_(static_cast<int>(kMaximumZoomFactor * 100)), |
321 temporary_zoom_settings_(false), | 321 temporary_zoom_settings_(false), |
322 content_restrictions_(0), | 322 content_restrictions_(0), |
323 color_chooser_(NULL), | 323 color_chooser_(NULL), |
324 fullscreen_widget_routing_id_(MSG_ROUTING_NONE) { | 324 fullscreen_widget_routing_id_(MSG_ROUTING_NONE) { |
325 } | 325 } |
326 | 326 |
327 WebContentsImpl::~WebContentsImpl() { | 327 WebContentsImpl::~WebContentsImpl() { |
328 is_being_destroyed_ = true; | 328 is_being_destroyed_ = true; |
329 | 329 |
330 for (std::set<RenderWidgetHostImpl*>::iterator iter = | 330 for (std::set<RenderWidgetHostImpl*>::iterator iter = |
331 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { | 331 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { |
332 (*iter)->DetachDelegate(); | 332 (*iter)->DetachDelegate(); |
333 } | 333 } |
334 created_widgets_.clear(); | 334 created_widgets_.clear(); |
335 | 335 |
336 // Clear out any JavaScript state. | 336 // Clear out any JavaScript state. |
337 if (dialog_creator_) | 337 if (dialog_manager_) |
338 dialog_creator_->ResetJavaScriptState(this); | 338 dialog_manager_->ResetJavaScriptState(this); |
339 | 339 |
340 if (color_chooser_) | 340 if (color_chooser_) |
341 color_chooser_->End(); | 341 color_chooser_->End(); |
342 | 342 |
343 NotifyDisconnected(); | 343 NotifyDisconnected(); |
344 | 344 |
345 // Notify any observer that have a reference on this WebContents. | 345 // Notify any observer that have a reference on this WebContents. |
346 NotificationService::current()->Notify( | 346 NotificationService::current()->Notify( |
347 NOTIFICATION_WEB_CONTENTS_DESTROYED, | 347 NOTIFICATION_WEB_CONTENTS_DESTROYED, |
348 Source<WebContents>(this), | 348 Source<WebContents>(this), |
(...skipping 2161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2510 DidNavigateMainFrame(details, params)); | 2510 DidNavigateMainFrame(details, params)); |
2511 } | 2511 } |
2512 | 2512 |
2513 void WebContentsImpl::DidNavigateAnyFramePostCommit( | 2513 void WebContentsImpl::DidNavigateAnyFramePostCommit( |
2514 RenderViewHost* render_view_host, | 2514 RenderViewHost* render_view_host, |
2515 const LoadCommittedDetails& details, | 2515 const LoadCommittedDetails& details, |
2516 const ViewHostMsg_FrameNavigate_Params& params) { | 2516 const ViewHostMsg_FrameNavigate_Params& params) { |
2517 // If we navigate off the page, reset JavaScript state. This does nothing | 2517 // If we navigate off the page, reset JavaScript state. This does nothing |
2518 // to prevent a malicious script from spamming messages, since the script | 2518 // to prevent a malicious script from spamming messages, since the script |
2519 // could just reload the page to stop blocking. | 2519 // could just reload the page to stop blocking. |
2520 if (dialog_creator_ && !details.is_in_page) { | 2520 if (dialog_manager_ && !details.is_in_page) { |
2521 dialog_creator_->ResetJavaScriptState(this); | 2521 dialog_manager_->ResetJavaScriptState(this); |
2522 dialog_creator_ = NULL; | 2522 dialog_manager_ = NULL; |
2523 } | 2523 } |
2524 | 2524 |
2525 // Notify observers about navigation. | 2525 // Notify observers about navigation. |
2526 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 2526 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
2527 DidNavigateAnyFrame(details, params)); | 2527 DidNavigateAnyFrame(details, params)); |
2528 } | 2528 } |
2529 | 2529 |
2530 void WebContentsImpl::UpdateMaxPageIDIfNecessary(RenderViewHost* rvh) { | 2530 void WebContentsImpl::UpdateMaxPageIDIfNecessary(RenderViewHost* rvh) { |
2531 // If we are creating a RVH for a restored controller, then we need to make | 2531 // If we are creating a RVH for a restored controller, then we need to make |
2532 // sure the RenderView starts with a next_page_id_ larger than the number | 2532 // sure the RenderView starts with a next_page_id_ larger than the number |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3114 IPC::Message* reply_msg, | 3114 IPC::Message* reply_msg, |
3115 bool* did_suppress_message) { | 3115 bool* did_suppress_message) { |
3116 // Suppress JavaScript dialogs when requested. Also suppress messages when | 3116 // Suppress JavaScript dialogs when requested. Also suppress messages when |
3117 // showing an interstitial as it's shown over the previous page and we don't | 3117 // showing an interstitial as it's shown over the previous page and we don't |
3118 // want the hidden page's dialogs to interfere with the interstitial. | 3118 // want the hidden page's dialogs to interfere with the interstitial. |
3119 bool suppress_this_message = | 3119 bool suppress_this_message = |
3120 static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out() || | 3120 static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out() || |
3121 ShowingInterstitialPage() || | 3121 ShowingInterstitialPage() || |
3122 !delegate_ || | 3122 !delegate_ || |
3123 delegate_->ShouldSuppressDialogs() || | 3123 delegate_->ShouldSuppressDialogs() || |
3124 !delegate_->GetJavaScriptDialogCreator(); | 3124 !delegate_->GetJavaScriptDialogManager(); |
3125 | 3125 |
3126 if (!suppress_this_message) { | 3126 if (!suppress_this_message) { |
3127 std::string accept_lang = GetContentClient()->browser()-> | 3127 std::string accept_lang = GetContentClient()->browser()-> |
3128 GetAcceptLangs(GetBrowserContext()); | 3128 GetAcceptLangs(GetBrowserContext()); |
3129 dialog_creator_ = delegate_->GetJavaScriptDialogCreator(); | 3129 dialog_manager_ = delegate_->GetJavaScriptDialogManager(); |
3130 dialog_creator_->RunJavaScriptDialog( | 3130 dialog_manager_->RunJavaScriptDialog( |
3131 this, | 3131 this, |
3132 frame_url.GetOrigin(), | 3132 frame_url.GetOrigin(), |
3133 accept_lang, | 3133 accept_lang, |
3134 javascript_message_type, | 3134 javascript_message_type, |
3135 message, | 3135 message, |
3136 default_prompt, | 3136 default_prompt, |
3137 base::Bind(&WebContentsImpl::OnDialogClosed, | 3137 base::Bind(&WebContentsImpl::OnDialogClosed, |
3138 base::Unretained(this), | 3138 base::Unretained(this), |
3139 rvh, | 3139 rvh, |
3140 reply_msg), | 3140 reply_msg), |
(...skipping 14 matching lines...) Expand all Loading... |
3155 bool is_reload, | 3155 bool is_reload, |
3156 IPC::Message* reply_msg) { | 3156 IPC::Message* reply_msg) { |
3157 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(rvh); | 3157 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(rvh); |
3158 if (delegate_) | 3158 if (delegate_) |
3159 delegate_->WillRunBeforeUnloadConfirm(); | 3159 delegate_->WillRunBeforeUnloadConfirm(); |
3160 | 3160 |
3161 bool suppress_this_message = | 3161 bool suppress_this_message = |
3162 rvhi->is_swapped_out() || | 3162 rvhi->is_swapped_out() || |
3163 !delegate_ || | 3163 !delegate_ || |
3164 delegate_->ShouldSuppressDialogs() || | 3164 delegate_->ShouldSuppressDialogs() || |
3165 !delegate_->GetJavaScriptDialogCreator(); | 3165 !delegate_->GetJavaScriptDialogManager(); |
3166 if (suppress_this_message) { | 3166 if (suppress_this_message) { |
3167 // The reply must be sent to the RVH that sent the request. | 3167 // The reply must be sent to the RVH that sent the request. |
3168 rvhi->JavaScriptDialogClosed(reply_msg, true, string16()); | 3168 rvhi->JavaScriptDialogClosed(reply_msg, true, string16()); |
3169 return; | 3169 return; |
3170 } | 3170 } |
3171 | 3171 |
3172 is_showing_before_unload_dialog_ = true; | 3172 is_showing_before_unload_dialog_ = true; |
3173 dialog_creator_ = delegate_->GetJavaScriptDialogCreator(); | 3173 dialog_manager_ = delegate_->GetJavaScriptDialogManager(); |
3174 dialog_creator_->RunBeforeUnloadDialog( | 3174 dialog_manager_->RunBeforeUnloadDialog( |
3175 this, message, is_reload, | 3175 this, message, is_reload, |
3176 base::Bind(&WebContentsImpl::OnDialogClosed, base::Unretained(this), rvh, | 3176 base::Bind(&WebContentsImpl::OnDialogClosed, base::Unretained(this), rvh, |
3177 reply_msg)); | 3177 reply_msg)); |
3178 } | 3178 } |
3179 | 3179 |
3180 bool WebContentsImpl::AddMessageToConsole(int32 level, | 3180 bool WebContentsImpl::AddMessageToConsole(int32 level, |
3181 const string16& message, | 3181 const string16& message, |
3182 int32 line_no, | 3182 int32 line_no, |
3183 const string16& source_id) { | 3183 const string16& source_id) { |
3184 if (!delegate_) | 3184 if (!delegate_) |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3446 | 3446 |
3447 BrowserPluginGuest* WebContentsImpl::GetBrowserPluginGuest() { | 3447 BrowserPluginGuest* WebContentsImpl::GetBrowserPluginGuest() { |
3448 return browser_plugin_guest_.get(); | 3448 return browser_plugin_guest_.get(); |
3449 } | 3449 } |
3450 | 3450 |
3451 BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() { | 3451 BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() { |
3452 return browser_plugin_embedder_.get(); | 3452 return browser_plugin_embedder_.get(); |
3453 } | 3453 } |
3454 | 3454 |
3455 } // namespace content | 3455 } // namespace content |
OLD | NEW |