| 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" |
| (...skipping 1990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2001 DidOpenRequestedURL(new_contents, | 2001 DidOpenRequestedURL(new_contents, |
| 2002 url, | 2002 url, |
| 2003 referrer, | 2003 referrer, |
| 2004 disposition, | 2004 disposition, |
| 2005 transition_type, | 2005 transition_type, |
| 2006 source_frame_id)); | 2006 source_frame_id)); |
| 2007 } | 2007 } |
| 2008 } | 2008 } |
| 2009 | 2009 |
| 2010 void TabContents::RunJavaScriptMessage( | 2010 void TabContents::RunJavaScriptMessage( |
| 2011 const RenderViewHost* rvh, | 2011 RenderViewHost* rvh, |
| 2012 const string16& message, | 2012 const string16& message, |
| 2013 const string16& default_prompt, | 2013 const string16& default_prompt, |
| 2014 const GURL& frame_url, | 2014 const GURL& frame_url, |
| 2015 ui::JavascriptMessageType javascript_message_type, | 2015 ui::JavascriptMessageType javascript_message_type, |
| 2016 IPC::Message* reply_msg, | 2016 IPC::Message* reply_msg, |
| 2017 bool* did_suppress_message) { | 2017 bool* did_suppress_message) { |
| 2018 // Suppress JavaScript dialogs when requested. Also suppress messages when | 2018 // Suppress JavaScript dialogs when requested. Also suppress messages when |
| 2019 // showing an interstitial as it's shown over the previous page and we don't | 2019 // showing an interstitial as it's shown over the previous page and we don't |
| 2020 // want the hidden page's dialogs to interfere with the interstitial. | 2020 // want the hidden page's dialogs to interfere with the interstitial. |
| 2021 bool suppress_this_message = | 2021 bool suppress_this_message = |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2045 javascript_message_type, | 2045 javascript_message_type, |
| 2046 message, | 2046 message, |
| 2047 default_prompt, | 2047 default_prompt, |
| 2048 reply_msg, | 2048 reply_msg, |
| 2049 &suppress_this_message); | 2049 &suppress_this_message); |
| 2050 } | 2050 } |
| 2051 | 2051 |
| 2052 if (suppress_this_message) { | 2052 if (suppress_this_message) { |
| 2053 // If we are suppressing messages, just reply as if the user immediately | 2053 // If we are suppressing messages, just reply as if the user immediately |
| 2054 // pressed "Cancel". | 2054 // pressed "Cancel". |
| 2055 OnDialogClosed(reply_msg, false, string16()); | 2055 OnDialogClosed(rvh, reply_msg, false, string16()); |
| 2056 } | 2056 } |
| 2057 | 2057 |
| 2058 *did_suppress_message = suppress_this_message; | 2058 *did_suppress_message = suppress_this_message; |
| 2059 } | 2059 } |
| 2060 | 2060 |
| 2061 void TabContents::RunBeforeUnloadConfirm(const RenderViewHost* rvh, | 2061 void TabContents::RunBeforeUnloadConfirm(RenderViewHost* rvh, |
| 2062 const string16& message, | 2062 const string16& message, |
| 2063 IPC::Message* reply_msg) { | 2063 IPC::Message* reply_msg) { |
| 2064 if (delegate_) | 2064 if (delegate_) |
| 2065 delegate_->WillRunBeforeUnloadConfirm(); | 2065 delegate_->WillRunBeforeUnloadConfirm(); |
| 2066 | 2066 |
| 2067 bool suppress_this_message = | 2067 bool suppress_this_message = |
| 2068 rvh->is_swapped_out() || | 2068 rvh->is_swapped_out() || |
| 2069 !delegate_ || | 2069 !delegate_ || |
| 2070 delegate_->ShouldSuppressDialogs(); | 2070 delegate_->ShouldSuppressDialogs(); |
| 2071 if (suppress_this_message) { | 2071 if (suppress_this_message) { |
| 2072 GetRenderViewHost()->JavaScriptDialogClosed(reply_msg, true, string16()); | 2072 // The reply must be sent to the RVH that sent the request. |
| 2073 rvh->JavaScriptDialogClosed(reply_msg, true, string16()); |
| 2073 return; | 2074 return; |
| 2074 } | 2075 } |
| 2075 | 2076 |
| 2076 is_showing_before_unload_dialog_ = true; | 2077 is_showing_before_unload_dialog_ = true; |
| 2077 dialog_creator_ = delegate_->GetJavaScriptDialogCreator(); | 2078 dialog_creator_ = delegate_->GetJavaScriptDialogCreator(); |
| 2078 dialog_creator_->RunBeforeUnloadDialog(this, | 2079 dialog_creator_->RunBeforeUnloadDialog(this, |
| 2079 message, | 2080 message, |
| 2080 reply_msg); | 2081 reply_msg); |
| 2081 } | 2082 } |
| 2082 | 2083 |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2248 // linux. See crbug.com/83941. | 2249 // linux. See crbug.com/83941. |
| 2249 if (rwh_view) { | 2250 if (rwh_view) { |
| 2250 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost()) | 2251 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost()) |
| 2251 render_widget_host->WasResized(); | 2252 render_widget_host->WasResized(); |
| 2252 } | 2253 } |
| 2253 #endif | 2254 #endif |
| 2254 | 2255 |
| 2255 return true; | 2256 return true; |
| 2256 } | 2257 } |
| 2257 | 2258 |
| 2258 void TabContents::OnDialogClosed(IPC::Message* reply_msg, | 2259 void TabContents::OnDialogClosed(RenderViewHost* rvh, |
| 2260 IPC::Message* reply_msg, |
| 2259 bool success, | 2261 bool success, |
| 2260 const string16& user_input) { | 2262 const string16& user_input) { |
| 2261 if (is_showing_before_unload_dialog_ && !success) { | 2263 if (is_showing_before_unload_dialog_ && !success) { |
| 2262 // If a beforeunload dialog is canceled, we need to stop the throbber from | 2264 // If a beforeunload dialog is canceled, we need to stop the throbber from |
| 2263 // spinning, since we forced it to start spinning in Navigate. | 2265 // spinning, since we forced it to start spinning in Navigate. |
| 2264 DidStopLoading(); | 2266 DidStopLoading(); |
| 2265 | 2267 |
| 2266 tab_close_start_time_ = base::TimeTicks(); | 2268 tab_close_start_time_ = base::TimeTicks(); |
| 2267 } | 2269 } |
| 2268 is_showing_before_unload_dialog_ = false; | 2270 is_showing_before_unload_dialog_ = false; |
| 2269 GetRenderViewHost()->JavaScriptDialogClosed(reply_msg, success, user_input); | 2271 // The reply must be sent to the RVH that sent the request. |
| 2272 // TODO(creis): Eliminate cases where we pass in null. |
| 2273 if (!rvh) |
| 2274 rvh = GetRenderViewHost(); |
| 2275 rvh->JavaScriptDialogClosed(reply_msg, success, user_input); |
| 2270 } | 2276 } |
| 2271 | 2277 |
| 2272 gfx::NativeWindow TabContents::GetDialogRootWindow() const { | 2278 gfx::NativeWindow TabContents::GetDialogRootWindow() const { |
| 2273 return view_->GetTopLevelNativeWindow(); | 2279 return view_->GetTopLevelNativeWindow(); |
| 2274 } | 2280 } |
| 2275 | 2281 |
| 2276 void TabContents::OnDialogShown() { | 2282 void TabContents::OnDialogShown() { |
| 2277 Activate(); | 2283 Activate(); |
| 2278 } | 2284 } |
| 2279 | 2285 |
| 2280 void TabContents::SetEncoding(const std::string& encoding) { | 2286 void TabContents::SetEncoding(const std::string& encoding) { |
| 2281 encoding_ = content::GetContentClient()->browser()-> | 2287 encoding_ = content::GetContentClient()->browser()-> |
| 2282 GetCanonicalEncodingNameByAliasName(encoding); | 2288 GetCanonicalEncodingNameByAliasName(encoding); |
| 2283 } | 2289 } |
| 2284 | 2290 |
| 2285 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { | 2291 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { |
| 2286 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); | 2292 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); |
| 2287 // Can be NULL during tests. | 2293 // Can be NULL during tests. |
| 2288 if (rwh_view) | 2294 if (rwh_view) |
| 2289 rwh_view->SetSize(GetView()->GetContainerSize()); | 2295 rwh_view->SetSize(GetView()->GetContainerSize()); |
| 2290 } | 2296 } |
| OLD | NEW |