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 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "content/public/browser/resource_request_details.h" | 31 #include "content/public/browser/resource_request_details.h" |
32 #include "content/browser/site_instance_impl.h" | 32 #include "content/browser/site_instance_impl.h" |
33 #include "content/browser/tab_contents/interstitial_page_impl.h" | 33 #include "content/browser/tab_contents/interstitial_page_impl.h" |
34 #include "content/browser/tab_contents/navigation_entry_impl.h" | 34 #include "content/browser/tab_contents/navigation_entry_impl.h" |
35 #include "content/browser/webui/web_ui_impl.h" | 35 #include "content/browser/webui/web_ui_impl.h" |
36 #include "content/common/intents_messages.h" | 36 #include "content/common/intents_messages.h" |
37 #include "content/common/ssl_status_serialization.h" | 37 #include "content/common/ssl_status_serialization.h" |
38 #include "content/common/view_messages.h" | 38 #include "content/common/view_messages.h" |
39 #include "content/port/browser/render_widget_host_view_port.h" | 39 #include "content/port/browser/render_widget_host_view_port.h" |
40 #include "content/public/browser/browser_context.h" | 40 #include "content/public/browser/browser_context.h" |
| 41 #include "content/public/browser/color_chooser.h" |
41 #include "content/public/browser/content_browser_client.h" | 42 #include "content/public/browser/content_browser_client.h" |
42 #include "content/public/browser/devtools_agent_host_registry.h" | 43 #include "content/public/browser/devtools_agent_host_registry.h" |
43 #include "content/public/browser/download_manager.h" | 44 #include "content/public/browser/download_manager.h" |
44 #include "content/public/browser/invalidate_type.h" | 45 #include "content/public/browser/invalidate_type.h" |
45 #include "content/public/browser/javascript_dialogs.h" | 46 #include "content/public/browser/javascript_dialogs.h" |
46 #include "content/public/browser/load_notification_details.h" | 47 #include "content/public/browser/load_notification_details.h" |
47 #include "content/public/browser/navigation_details.h" | 48 #include "content/public/browser/navigation_details.h" |
48 #include "content/public/browser/notification_service.h" | 49 #include "content/public/browser/notification_service.h" |
49 #include "content/public/browser/user_metrics.h" | 50 #include "content/public/browser/user_metrics.h" |
50 #include "content/public/browser/web_contents_delegate.h" | 51 #include "content/public/browser/web_contents_delegate.h" |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 is_showing_before_unload_dialog_(false), | 266 is_showing_before_unload_dialog_(false), |
266 opener_web_ui_type_(WebUI::kNoWebUI), | 267 opener_web_ui_type_(WebUI::kNoWebUI), |
267 closed_by_user_gesture_(false), | 268 closed_by_user_gesture_(false), |
268 minimum_zoom_percent_( | 269 minimum_zoom_percent_( |
269 static_cast<int>(content::kMinimumZoomFactor * 100)), | 270 static_cast<int>(content::kMinimumZoomFactor * 100)), |
270 maximum_zoom_percent_( | 271 maximum_zoom_percent_( |
271 static_cast<int>(content::kMaximumZoomFactor * 100)), | 272 static_cast<int>(content::kMaximumZoomFactor * 100)), |
272 temporary_zoom_settings_(false), | 273 temporary_zoom_settings_(false), |
273 content_restrictions_(0), | 274 content_restrictions_(0), |
274 view_type_(content::VIEW_TYPE_TAB_CONTENTS), | 275 view_type_(content::VIEW_TYPE_TAB_CONTENTS), |
275 has_opener_(false) { | 276 has_opener_(false), |
| 277 color_chooser_(NULL) { |
276 render_manager_.Init(browser_context, site_instance, routing_id); | 278 render_manager_.Init(browser_context, site_instance, routing_id); |
277 | 279 |
278 view_.reset(content::GetContentClient()->browser()-> | 280 view_.reset(content::GetContentClient()->browser()-> |
279 OverrideCreateWebContentsView(this)); | 281 OverrideCreateWebContentsView(this)); |
280 if (!view_.get()) { | 282 if (!view_.get()) { |
281 content::WebContentsViewDelegate* delegate = | 283 content::WebContentsViewDelegate* delegate = |
282 content::GetContentClient()->browser()->GetWebContentsViewDelegate( | 284 content::GetContentClient()->browser()->GetWebContentsViewDelegate( |
283 this); | 285 this); |
284 #if defined(OS_WIN) && !defined(USE_AURA) | 286 #if defined(OS_WIN) && !defined(USE_AURA) |
285 view_.reset(new TabContentsViewWin(this, delegate)); | 287 view_.reset(new TabContentsViewWin(this, delegate)); |
(...skipping 19 matching lines...) Expand all Loading... |
305 #endif | 307 #endif |
306 } | 308 } |
307 | 309 |
308 TabContents::~TabContents() { | 310 TabContents::~TabContents() { |
309 is_being_destroyed_ = true; | 311 is_being_destroyed_ = true; |
310 | 312 |
311 // Clear out any JavaScript state. | 313 // Clear out any JavaScript state. |
312 if (dialog_creator_) | 314 if (dialog_creator_) |
313 dialog_creator_->ResetJavaScriptState(this); | 315 dialog_creator_->ResetJavaScriptState(this); |
314 | 316 |
| 317 if (color_chooser_) |
| 318 color_chooser_->End(); |
| 319 |
315 NotifyDisconnected(); | 320 NotifyDisconnected(); |
316 | 321 |
317 // Notify any observer that have a reference on this tab contents. | 322 // Notify any observer that have a reference on this tab contents. |
318 content::NotificationService::current()->Notify( | 323 content::NotificationService::current()->Notify( |
319 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 324 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
320 content::Source<WebContents>(this), | 325 content::Source<WebContents>(this), |
321 content::NotificationService::NoDetails()); | 326 content::NotificationService::NoDetails()); |
322 | 327 |
323 // TODO(brettw) this should be moved to the view. | 328 // TODO(brettw) this should be moved to the view. |
324 #if defined(OS_WIN) && !defined(USE_AURA) | 329 #if defined(OS_WIN) && !defined(USE_AURA) |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 IPC_MESSAGE_HANDLER(ViewHostMsg_GoToEntryAtOffset, OnGoToEntryAtOffset) | 556 IPC_MESSAGE_HANDLER(ViewHostMsg_GoToEntryAtOffset, OnGoToEntryAtOffset) |
552 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateZoomLimits, OnUpdateZoomLimits) | 557 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateZoomLimits, OnUpdateZoomLimits) |
553 IPC_MESSAGE_HANDLER(ViewHostMsg_SaveURLAs, OnSaveURL) | 558 IPC_MESSAGE_HANDLER(ViewHostMsg_SaveURLAs, OnSaveURL) |
554 IPC_MESSAGE_HANDLER(ViewHostMsg_EnumerateDirectory, OnEnumerateDirectory) | 559 IPC_MESSAGE_HANDLER(ViewHostMsg_EnumerateDirectory, OnEnumerateDirectory) |
555 IPC_MESSAGE_HANDLER(ViewHostMsg_JSOutOfMemory, OnJSOutOfMemory) | 560 IPC_MESSAGE_HANDLER(ViewHostMsg_JSOutOfMemory, OnJSOutOfMemory) |
556 IPC_MESSAGE_HANDLER(ViewHostMsg_RegisterProtocolHandler, | 561 IPC_MESSAGE_HANDLER(ViewHostMsg_RegisterProtocolHandler, |
557 OnRegisterProtocolHandler) | 562 OnRegisterProtocolHandler) |
558 IPC_MESSAGE_HANDLER(ViewHostMsg_Find_Reply, OnFindReply) | 563 IPC_MESSAGE_HANDLER(ViewHostMsg_Find_Reply, OnFindReply) |
559 IPC_MESSAGE_HANDLER(ViewHostMsg_CrashedPlugin, OnCrashedPlugin) | 564 IPC_MESSAGE_HANDLER(ViewHostMsg_CrashedPlugin, OnCrashedPlugin) |
560 IPC_MESSAGE_HANDLER(ViewHostMsg_AppCacheAccessed, OnAppCacheAccessed) | 565 IPC_MESSAGE_HANDLER(ViewHostMsg_AppCacheAccessed, OnAppCacheAccessed) |
| 566 IPC_MESSAGE_HANDLER(ViewHostMsg_OpenColorChooser, OnOpenColorChooser) |
| 567 IPC_MESSAGE_HANDLER(ViewHostMsg_EndColorChooser, OnEndColorChooser) |
| 568 IPC_MESSAGE_HANDLER(ViewHostMsg_SetSelectedColorInColorChooser, |
| 569 OnSetSelectedColorInColorChooser) |
561 IPC_MESSAGE_UNHANDLED(handled = false) | 570 IPC_MESSAGE_UNHANDLED(handled = false) |
562 IPC_END_MESSAGE_MAP_EX() | 571 IPC_END_MESSAGE_MAP_EX() |
563 | 572 |
564 if (!message_is_ok) { | 573 if (!message_is_ok) { |
565 content::RecordAction(UserMetricsAction("BadMessageTerminate_RVD")); | 574 content::RecordAction(UserMetricsAction("BadMessageTerminate_RVD")); |
566 GetRenderProcessHost()->ReceivedBadMessage(); | 575 GetRenderProcessHost()->ReceivedBadMessage(); |
567 } | 576 } |
568 | 577 |
569 return handled; | 578 return handled; |
570 } | 579 } |
(...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1374 | 1383 |
1375 bool TabContents::GotResponseToLockMouseRequest(bool allowed) { | 1384 bool TabContents::GotResponseToLockMouseRequest(bool allowed) { |
1376 return GetRenderViewHost() ? | 1385 return GetRenderViewHost() ? |
1377 GetRenderViewHostImpl()->GotResponseToLockMouseRequest(allowed) : false; | 1386 GetRenderViewHostImpl()->GotResponseToLockMouseRequest(allowed) : false; |
1378 } | 1387 } |
1379 | 1388 |
1380 bool TabContents::HasOpener() const { | 1389 bool TabContents::HasOpener() const { |
1381 return has_opener_; | 1390 return has_opener_; |
1382 } | 1391 } |
1383 | 1392 |
| 1393 void TabContents::DidChooseColorInColorChooser(int color_chooser_id, |
| 1394 const SkColor& color) { |
| 1395 GetRenderViewHost()->Send(new ViewMsg_DidChooseColorResponse( |
| 1396 GetRenderViewHost()->GetRoutingID(), color_chooser_id, color)); |
| 1397 } |
| 1398 |
| 1399 void TabContents::DidEndColorChooser(int color_chooser_id) { |
| 1400 GetRenderViewHost()->Send(new ViewMsg_DidEndColorChooser( |
| 1401 GetRenderViewHost()->GetRoutingID(), color_chooser_id)); |
| 1402 if (delegate_) |
| 1403 delegate_->DidEndColorChooser(); |
| 1404 color_chooser_ = NULL; |
| 1405 } |
| 1406 |
1384 bool TabContents::FocusLocationBarByDefault() { | 1407 bool TabContents::FocusLocationBarByDefault() { |
1385 content::WebUI* web_ui = GetWebUIForCurrentState(); | 1408 content::WebUI* web_ui = GetWebUIForCurrentState(); |
1386 if (web_ui) | 1409 if (web_ui) |
1387 return web_ui->ShouldFocusLocationBarByDefault(); | 1410 return web_ui->ShouldFocusLocationBarByDefault(); |
1388 NavigationEntry* entry = controller_.GetActiveEntry(); | 1411 NavigationEntry* entry = controller_.GetActiveEntry(); |
1389 if (entry && entry->GetURL() == GURL(chrome::kAboutBlankURL)) | 1412 if (entry && entry->GetURL() == GURL(chrome::kAboutBlankURL)) |
1390 return true; | 1413 return true; |
1391 return false; | 1414 return false; |
1392 } | 1415 } |
1393 | 1416 |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1683 delegate_->CrashedPlugin(this, plugin_path); | 1706 delegate_->CrashedPlugin(this, plugin_path); |
1684 } | 1707 } |
1685 | 1708 |
1686 void TabContents::OnAppCacheAccessed(const GURL& manifest_url, | 1709 void TabContents::OnAppCacheAccessed(const GURL& manifest_url, |
1687 bool blocked_by_policy) { | 1710 bool blocked_by_policy) { |
1688 // Notify observers about navigation. | 1711 // Notify observers about navigation. |
1689 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 1712 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
1690 AppCacheAccessed(manifest_url, blocked_by_policy)); | 1713 AppCacheAccessed(manifest_url, blocked_by_policy)); |
1691 } | 1714 } |
1692 | 1715 |
| 1716 void TabContents::OnOpenColorChooser(int color_chooser_id, |
| 1717 const SkColor& color) { |
| 1718 color_chooser_ = delegate_->OpenColorChooser(this, color_chooser_id, color); |
| 1719 } |
| 1720 |
| 1721 void TabContents::OnEndColorChooser(int color_chooser_id) { |
| 1722 if (color_chooser_ && |
| 1723 color_chooser_id == color_chooser_->identifier()) |
| 1724 color_chooser_->End(); |
| 1725 } |
| 1726 |
| 1727 void TabContents::OnSetSelectedColorInColorChooser(int color_chooser_id, |
| 1728 const SkColor& color) { |
| 1729 if (color_chooser_ && |
| 1730 color_chooser_id == color_chooser_->identifier()) |
| 1731 color_chooser_->SetSelectedColor(color); |
| 1732 } |
| 1733 |
1693 // Notifies the RenderWidgetHost instance about the fact that the page is | 1734 // Notifies the RenderWidgetHost instance about the fact that the page is |
1694 // loading, or done loading and calls the base implementation. | 1735 // loading, or done loading and calls the base implementation. |
1695 void TabContents::SetIsLoading(bool is_loading, | 1736 void TabContents::SetIsLoading(bool is_loading, |
1696 LoadNotificationDetails* details) { | 1737 LoadNotificationDetails* details) { |
1697 if (is_loading == is_loading_) | 1738 if (is_loading == is_loading_) |
1698 return; | 1739 return; |
1699 | 1740 |
1700 if (!is_loading) { | 1741 if (!is_loading) { |
1701 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, string16()); | 1742 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, string16()); |
1702 load_state_host_.clear(); | 1743 load_state_host_.clear(); |
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2531 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { | 2572 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { |
2532 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); | 2573 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); |
2533 // Can be NULL during tests. | 2574 // Can be NULL during tests. |
2534 if (rwh_view) | 2575 if (rwh_view) |
2535 rwh_view->SetSize(GetView()->GetContainerSize()); | 2576 rwh_view->SetSize(GetView()->GetContainerSize()); |
2536 } | 2577 } |
2537 | 2578 |
2538 RenderViewHostImpl* TabContents::GetRenderViewHostImpl() { | 2579 RenderViewHostImpl* TabContents::GetRenderViewHostImpl() { |
2539 return static_cast<RenderViewHostImpl*>(GetRenderViewHost()); | 2580 return static_cast<RenderViewHostImpl*>(GetRenderViewHost()); |
2540 } | 2581 } |
OLD | NEW |