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/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 3062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3073 dialog_manager_ = delegate_->GetJavaScriptDialogManager(); | 3073 dialog_manager_ = delegate_->GetJavaScriptDialogManager(); |
3074 dialog_manager_->RunJavaScriptDialog( | 3074 dialog_manager_->RunJavaScriptDialog( |
3075 this, | 3075 this, |
3076 frame_url.GetOrigin(), | 3076 frame_url.GetOrigin(), |
3077 accept_lang, | 3077 accept_lang, |
3078 javascript_message_type, | 3078 javascript_message_type, |
3079 message, | 3079 message, |
3080 default_prompt, | 3080 default_prompt, |
3081 base::Bind(&WebContentsImpl::OnDialogClosed, | 3081 base::Bind(&WebContentsImpl::OnDialogClosed, |
3082 base::Unretained(this), | 3082 base::Unretained(this), |
3083 rfh, | 3083 rfh->GetProcess()->GetID(), |
| 3084 rfh->GetRoutingID(), |
3084 reply_msg, | 3085 reply_msg, |
3085 false), | 3086 false), |
3086 &suppress_this_message); | 3087 &suppress_this_message); |
3087 } | 3088 } |
3088 | 3089 |
3089 if (suppress_this_message) { | 3090 if (suppress_this_message) { |
3090 // If we are suppressing messages, just reply as if the user immediately | 3091 // If we are suppressing messages, just reply as if the user immediately |
3091 // pressed "Cancel", passing true to |dialog_was_suppressed|. | 3092 // pressed "Cancel", passing true to |dialog_was_suppressed|. |
3092 OnDialogClosed(rfh, reply_msg, true, false, base::string16()); | 3093 OnDialogClosed(rfh->GetProcess()->GetID(), rfh->GetRoutingID(), reply_msg, |
| 3094 true, false, base::string16()); |
3093 } | 3095 } |
3094 | 3096 |
3095 // OnDialogClosed (two lines up) may have caused deletion of this object (see | 3097 // OnDialogClosed (two lines up) may have caused deletion of this object (see |
3096 // http://crbug.com/288961 ). The only safe thing to do here is return. | 3098 // http://crbug.com/288961 ). The only safe thing to do here is return. |
3097 } | 3099 } |
3098 | 3100 |
3099 void WebContentsImpl::RunBeforeUnloadConfirm( | 3101 void WebContentsImpl::RunBeforeUnloadConfirm( |
3100 RenderFrameHost* rfh, | 3102 RenderFrameHost* rfh, |
3101 const base::string16& message, | 3103 const base::string16& message, |
3102 bool is_reload, | 3104 bool is_reload, |
(...skipping 12 matching lines...) Expand all Loading... |
3115 if (suppress_this_message) { | 3117 if (suppress_this_message) { |
3116 rfhi->JavaScriptDialogClosed(reply_msg, true, base::string16(), true); | 3118 rfhi->JavaScriptDialogClosed(reply_msg, true, base::string16(), true); |
3117 return; | 3119 return; |
3118 } | 3120 } |
3119 | 3121 |
3120 is_showing_before_unload_dialog_ = true; | 3122 is_showing_before_unload_dialog_ = true; |
3121 dialog_manager_ = delegate_->GetJavaScriptDialogManager(); | 3123 dialog_manager_ = delegate_->GetJavaScriptDialogManager(); |
3122 dialog_manager_->RunBeforeUnloadDialog( | 3124 dialog_manager_->RunBeforeUnloadDialog( |
3123 this, message, is_reload, | 3125 this, message, is_reload, |
3124 base::Bind(&WebContentsImpl::OnDialogClosed, base::Unretained(this), | 3126 base::Bind(&WebContentsImpl::OnDialogClosed, base::Unretained(this), |
3125 rfh, reply_msg, false)); | 3127 rfh->GetProcess()->GetID(), rfh->GetRoutingID(), reply_msg, |
| 3128 false)); |
3126 } | 3129 } |
3127 | 3130 |
3128 WebContents* WebContentsImpl::GetAsWebContents() { | 3131 WebContents* WebContentsImpl::GetAsWebContents() { |
3129 return this; | 3132 return this; |
3130 } | 3133 } |
3131 | 3134 |
3132 bool WebContentsImpl::IsNeverVisible() { | 3135 bool WebContentsImpl::IsNeverVisible() { |
3133 if (!delegate_) | 3136 if (!delegate_) |
3134 return false; | 3137 return false; |
3135 return delegate_->IsNeverVisible(this); | 3138 return delegate_->IsNeverVisible(this); |
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3789 return web_contents_android->GetJavaObject(); | 3792 return web_contents_android->GetJavaObject(); |
3790 } | 3793 } |
3791 | 3794 |
3792 bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() { | 3795 bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() { |
3793 return CreateRenderViewForRenderManager(GetRenderViewHost(), | 3796 return CreateRenderViewForRenderManager(GetRenderViewHost(), |
3794 MSG_ROUTING_NONE, | 3797 MSG_ROUTING_NONE, |
3795 NULL); | 3798 NULL); |
3796 } | 3799 } |
3797 #endif | 3800 #endif |
3798 | 3801 |
3799 void WebContentsImpl::OnDialogClosed(RenderFrameHost* rfh, | 3802 void WebContentsImpl::OnDialogClosed(int render_process_id, |
| 3803 int render_frame_id, |
3800 IPC::Message* reply_msg, | 3804 IPC::Message* reply_msg, |
3801 bool dialog_was_suppressed, | 3805 bool dialog_was_suppressed, |
3802 bool success, | 3806 bool success, |
3803 const base::string16& user_input) { | 3807 const base::string16& user_input) { |
| 3808 RenderFrameHostImpl* rfh = RenderFrameHostImpl::FromID(render_process_id, |
| 3809 render_frame_id); |
3804 last_dialog_suppressed_ = dialog_was_suppressed; | 3810 last_dialog_suppressed_ = dialog_was_suppressed; |
3805 | 3811 |
3806 if (is_showing_before_unload_dialog_ && !success) { | 3812 if (is_showing_before_unload_dialog_ && !success) { |
3807 // If a beforeunload dialog is canceled, we need to stop the throbber from | 3813 // If a beforeunload dialog is canceled, we need to stop the throbber from |
3808 // spinning, since we forced it to start spinning in Navigate. | 3814 // spinning, since we forced it to start spinning in Navigate. |
3809 DidStopLoading(rfh); | 3815 if (rfh) |
| 3816 DidStopLoading(rfh); |
3810 controller_.DiscardNonCommittedEntries(); | 3817 controller_.DiscardNonCommittedEntries(); |
3811 | 3818 |
3812 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 3819 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
3813 BeforeUnloadDialogCancelled()); | 3820 BeforeUnloadDialogCancelled()); |
3814 } | 3821 } |
3815 | 3822 |
3816 is_showing_before_unload_dialog_ = false; | 3823 is_showing_before_unload_dialog_ = false; |
3817 static_cast<RenderFrameHostImpl*>(rfh)->JavaScriptDialogClosed( | 3824 if (rfh) { |
3818 reply_msg, success, user_input, dialog_was_suppressed); | 3825 rfh->JavaScriptDialogClosed(reply_msg, success, user_input, |
| 3826 dialog_was_suppressed); |
| 3827 } else { |
| 3828 // Don't leak the sync IPC reply if the RFH or process is gone. |
| 3829 delete reply_msg; |
| 3830 } |
3819 } | 3831 } |
3820 | 3832 |
3821 void WebContentsImpl::SetEncoding(const std::string& encoding) { | 3833 void WebContentsImpl::SetEncoding(const std::string& encoding) { |
3822 encoding_ = GetContentClient()->browser()-> | 3834 encoding_ = GetContentClient()->browser()-> |
3823 GetCanonicalEncodingNameByAliasName(encoding); | 3835 GetCanonicalEncodingNameByAliasName(encoding); |
3824 } | 3836 } |
3825 | 3837 |
3826 void WebContentsImpl::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { | 3838 void WebContentsImpl::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { |
3827 RenderWidgetHostView* rwh_view = view_->CreateViewForWidget(rvh); | 3839 RenderWidgetHostView* rwh_view = view_->CreateViewForWidget(rvh); |
3828 // Can be NULL during tests. | 3840 // Can be NULL during tests. |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3893 | 3905 |
3894 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { | 3906 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { |
3895 if (!delegate_) | 3907 if (!delegate_) |
3896 return; | 3908 return; |
3897 const gfx::Size new_size = GetPreferredSize(); | 3909 const gfx::Size new_size = GetPreferredSize(); |
3898 if (new_size != old_size) | 3910 if (new_size != old_size) |
3899 delegate_->UpdatePreferredSize(this, new_size); | 3911 delegate_->UpdatePreferredSize(this, new_size); |
3900 } | 3912 } |
3901 | 3913 |
3902 } // namespace content | 3914 } // namespace content |
OLD | NEW |