Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 501583003: Move external popup menus from WebViewClient to WebFrameClient, part 3/3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nicer ipc Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 #include "content/renderer/accessibility/renderer_accessibility.h" 51 #include "content/renderer/accessibility/renderer_accessibility.h"
52 #include "content/renderer/accessibility/renderer_accessibility_complete.h" 52 #include "content/renderer/accessibility/renderer_accessibility_complete.h"
53 #include "content/renderer/accessibility/renderer_accessibility_focus_only.h" 53 #include "content/renderer/accessibility/renderer_accessibility_focus_only.h"
54 #include "content/renderer/browser_plugin/browser_plugin.h" 54 #include "content/renderer/browser_plugin/browser_plugin.h"
55 #include "content/renderer/browser_plugin/browser_plugin_manager.h" 55 #include "content/renderer/browser_plugin/browser_plugin_manager.h"
56 #include "content/renderer/child_frame_compositing_helper.h" 56 #include "content/renderer/child_frame_compositing_helper.h"
57 #include "content/renderer/context_menu_params_builder.h" 57 #include "content/renderer/context_menu_params_builder.h"
58 #include "content/renderer/devtools/devtools_agent.h" 58 #include "content/renderer/devtools/devtools_agent.h"
59 #include "content/renderer/dom_automation_controller.h" 59 #include "content/renderer/dom_automation_controller.h"
60 #include "content/renderer/dom_utils.h" 60 #include "content/renderer/dom_utils.h"
61 #include "content/renderer/external_popup_menu.h"
61 #include "content/renderer/geolocation_dispatcher.h" 62 #include "content/renderer/geolocation_dispatcher.h"
62 #include "content/renderer/history_controller.h" 63 #include "content/renderer/history_controller.h"
63 #include "content/renderer/history_serialization.h" 64 #include "content/renderer/history_serialization.h"
64 #include "content/renderer/image_loading_helper.h" 65 #include "content/renderer/image_loading_helper.h"
65 #include "content/renderer/ime_event_guard.h" 66 #include "content/renderer/ime_event_guard.h"
66 #include "content/renderer/internal_document_state_data.h" 67 #include "content/renderer/internal_document_state_data.h"
67 #include "content/renderer/media/audio_renderer_mixer_manager.h" 68 #include "content/renderer/media/audio_renderer_mixer_manager.h"
68 #include "content/renderer/media/media_stream_dispatcher.h" 69 #include "content/renderer/media/media_stream_dispatcher.h"
69 #include "content/renderer/media/media_stream_impl.h" 70 #include "content/renderer/media/media_stream_impl.h"
70 #include "content/renderer/media/media_stream_renderer_factory.h" 71 #include "content/renderer/media/media_stream_renderer_factory.h"
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 // In most cases, send IPCs through the proxy when swapped out. In some 716 // In most cases, send IPCs through the proxy when swapped out. In some
716 // calls the associated RenderViewImpl routing id is used to send 717 // calls the associated RenderViewImpl routing id is used to send
717 // messages, so don't use the proxy. 718 // messages, so don't use the proxy.
718 if (render_frame_proxy_ && message->routing_id() == routing_id_) 719 if (render_frame_proxy_ && message->routing_id() == routing_id_)
719 return render_frame_proxy_->Send(message); 720 return render_frame_proxy_->Send(message);
720 } 721 }
721 722
722 return RenderThread::Get()->Send(message); 723 return RenderThread::Get()->Send(message);
723 } 724 }
724 725
726 #if defined(OS_MACOSX) || defined(OS_ANDROID)
727 void RenderFrameImpl::DidHideExternalPopupMenu() {
728 // We need to clear external_popup_menu_ as soon as ExternalPopupMenu::close
729 // is called. Otherwise, createExternalPopupMenu() for new popup will fail.
730 external_popup_menu_.reset();
731 }
732 #endif
733
725 bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { 734 bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
726 // TODO(kenrb): document() should not be null, but as a transitional step 735 // TODO(kenrb): document() should not be null, but as a transitional step
727 // we have RenderFrameProxy 'wrapping' a RenderFrameImpl, passing messages 736 // we have RenderFrameProxy 'wrapping' a RenderFrameImpl, passing messages
728 // to this method. This happens for a top-level remote frame, where a 737 // to this method. This happens for a top-level remote frame, where a
729 // document-less RenderFrame is replaced by a RenderFrameProxy but kept 738 // document-less RenderFrame is replaced by a RenderFrameProxy but kept
730 // around and is still able to receive messages. 739 // around and is still able to receive messages.
731 if (!frame_->document().isNull()) 740 if (!frame_->document().isNull())
732 GetContentClient()->SetActiveURL(frame_->document().url()); 741 GetContentClient()->SetActiveURL(frame_->document().url());
733 742
734 ObserverListBase<RenderFrameObserver>::Iterator it(observers_); 743 ObserverListBase<RenderFrameObserver>::Iterator it(observers_);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 OnSetEditableSelectionOffsets) 779 OnSetEditableSelectionOffsets)
771 IPC_MESSAGE_HANDLER(FrameMsg_SetupTransitionView, OnSetupTransitionView) 780 IPC_MESSAGE_HANDLER(FrameMsg_SetupTransitionView, OnSetupTransitionView)
772 IPC_MESSAGE_HANDLER(FrameMsg_BeginExitTransition, OnBeginExitTransition) 781 IPC_MESSAGE_HANDLER(FrameMsg_BeginExitTransition, OnBeginExitTransition)
773 IPC_MESSAGE_HANDLER(FrameMsg_Reload, OnReload) 782 IPC_MESSAGE_HANDLER(FrameMsg_Reload, OnReload)
774 IPC_MESSAGE_HANDLER(FrameMsg_TextSurroundingSelectionRequest, 783 IPC_MESSAGE_HANDLER(FrameMsg_TextSurroundingSelectionRequest,
775 OnTextSurroundingSelectionRequest) 784 OnTextSurroundingSelectionRequest)
776 IPC_MESSAGE_HANDLER(FrameMsg_AddStyleSheetByURL, 785 IPC_MESSAGE_HANDLER(FrameMsg_AddStyleSheetByURL,
777 OnAddStyleSheetByURL) 786 OnAddStyleSheetByURL)
778 IPC_MESSAGE_HANDLER(FrameMsg_SetAccessibilityMode, 787 IPC_MESSAGE_HANDLER(FrameMsg_SetAccessibilityMode,
779 OnSetAccessibilityMode) 788 OnSetAccessibilityMode)
780 #if defined(OS_MACOSX) 789 #if defined(OS_ANDROID)
790 IPC_MESSAGE_HANDLER(FrameMsg_SelectPopupMenuItems, OnSelectPopupMenuItems)
791 #elif defined(OS_MACOSX)
792 IPC_MESSAGE_HANDLER(FrameMsg_SelectPopupMenuItem, OnSelectPopupMenuItem)
781 IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard) 793 IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard)
782 #endif 794 #endif
783 IPC_END_MESSAGE_MAP() 795 IPC_END_MESSAGE_MAP()
784 796
785 return handled; 797 return handled;
786 } 798 }
787 799
788 void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) { 800 void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) {
789 MaybeHandleDebugURL(params.url); 801 MaybeHandleDebugURL(params.url);
790 if (!render_view_->webview()) 802 if (!render_view_->webview())
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 return; 1277 return;
1266 1278
1267 if (accessibility_mode_ & AccessibilityModeFlagFullTree) 1279 if (accessibility_mode_ & AccessibilityModeFlagFullTree)
1268 renderer_accessibility_ = new RendererAccessibilityComplete(this); 1280 renderer_accessibility_ = new RendererAccessibilityComplete(this);
1269 #if !defined(OS_ANDROID) 1281 #if !defined(OS_ANDROID)
1270 else 1282 else
1271 renderer_accessibility_ = new RendererAccessibilityFocusOnly(this); 1283 renderer_accessibility_ = new RendererAccessibilityFocusOnly(this);
1272 #endif 1284 #endif
1273 } 1285 }
1274 1286
1287 #if defined(OS_ANDROID)
1288 void RenderFrameImpl::OnSelectPopupMenuItems(
1289 bool canceled,
1290 const std::vector<int>& selected_indices) {
1291 // It is possible to receive more than one of these calls if the user presses
1292 // a select faster than it takes for the show-select-popup IPC message to make
1293 // it to the browser UI thread. Ignore the extra-messages.
1294 // TODO(jcivelli): http:/b/5793321 Implement a better fix, as detailed in bug.
1295 if (!external_popup_menu_)
1296 return;
1297
1298 external_popup_menu_->DidSelectItems(canceled, selected_indices);
1299 external_popup_menu_.reset();
1300 }
1301 #endif
1302
1303 #if defined(OS_MACOSX)
1304 void RenderFrameImpl::OnSelectPopupMenuItem(int selected_index) {
1305 if (external_popup_menu_ == NULL)
1306 return;
1307 external_popup_menu_->DidSelectItem(selected_index);
1308 external_popup_menu_.reset();
1309 }
1310 #endif
1311
1275 void RenderFrameImpl::OnReload(bool ignore_cache) { 1312 void RenderFrameImpl::OnReload(bool ignore_cache) {
1276 frame_->reload(ignore_cache); 1313 frame_->reload(ignore_cache);
1277 } 1314 }
1278 1315
1279 void RenderFrameImpl::OnTextSurroundingSelectionRequest(size_t max_length) { 1316 void RenderFrameImpl::OnTextSurroundingSelectionRequest(size_t max_length) {
1280 blink::WebSurroundingText surroundingText; 1317 blink::WebSurroundingText surroundingText;
1281 surroundingText.initialize(frame_->selectionRange(), max_length); 1318 surroundingText.initialize(frame_->selectionRange(), max_length);
1282 1319
1283 if (surroundingText.isNull()) { 1320 if (surroundingText.isNull()) {
1284 // |surroundingText| might not be correctly initialized, for example if 1321 // |surroundingText| might not be correctly initialized, for example if
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 if (!frame || !frame->view()) 1598 if (!frame || !frame->view())
1562 return NULL; 1599 return NULL;
1563 DCHECK(!frame_ || frame_ == frame); 1600 DCHECK(!frame_ || frame_ == frame);
1564 return GetContentClient()->renderer()->CreateWorkerPermissionClientProxy( 1601 return GetContentClient()->renderer()->CreateWorkerPermissionClientProxy(
1565 this, frame); 1602 this, frame);
1566 } 1603 }
1567 1604
1568 WebExternalPopupMenu* RenderFrameImpl::createExternalPopupMenu( 1605 WebExternalPopupMenu* RenderFrameImpl::createExternalPopupMenu(
1569 const WebPopupMenuInfo& popup_menu_info, 1606 const WebPopupMenuInfo& popup_menu_info,
1570 WebExternalPopupMenuClient* popup_menu_client) { 1607 WebExternalPopupMenuClient* popup_menu_client) {
1571 return render_view_->createExternalPopupMenu(popup_menu_info, 1608 #if defined(OS_MACOSX) || defined(OS_ANDROID)
1572 popup_menu_client); 1609 // An IPC message is sent to the browser to build and display the actual
1610 // popup. The user could have time to click a different select by the time
1611 // the popup is shown. In that case external_popup_menu_ is non NULL.
1612 // By returning NULL in that case, we instruct Blink to cancel that new
1613 // popup. So from the user perspective, only the first one will show, and
1614 // will have to close the first one before another one can be shown.
1615 if (external_popup_menu_)
1616 return NULL;
1617 external_popup_menu_.reset(
1618 new ExternalPopupMenu(this, popup_menu_info, popup_menu_client));
1619 if (render_view_->screen_metrics_emulator_) {
1620 render_view_->SetExternalPopupOriginAdjustmentsForEmulation(
1621 external_popup_menu_.get(),
1622 render_view_->screen_metrics_emulator_.get());
1623 }
1624 return external_popup_menu_.get();
1625 #else
1626 return NULL;
1627 #endif
1573 } 1628 }
1574 1629
1575 blink::WebCookieJar* RenderFrameImpl::cookieJar(blink::WebLocalFrame* frame) { 1630 blink::WebCookieJar* RenderFrameImpl::cookieJar(blink::WebLocalFrame* frame) {
1576 DCHECK(!frame_ || frame_ == frame); 1631 DCHECK(!frame_ || frame_ == frame);
1577 return &cookie_jar_; 1632 return &cookie_jar_;
1578 } 1633 }
1579 1634
1580 blink::WebServiceWorkerProvider* RenderFrameImpl::createServiceWorkerProvider( 1635 blink::WebServiceWorkerProvider* RenderFrameImpl::createServiceWorkerProvider(
1581 blink::WebLocalFrame* frame) { 1636 blink::WebLocalFrame* frame) {
1582 DCHECK(!frame_ || frame_ == frame); 1637 DCHECK(!frame_ || frame_ == frame);
(...skipping 2169 matching lines...) Expand 10 before | Expand all | Expand 10 after
3752 3807
3753 #if defined(ENABLE_BROWSER_CDMS) 3808 #if defined(ENABLE_BROWSER_CDMS)
3754 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 3809 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
3755 if (!cdm_manager_) 3810 if (!cdm_manager_)
3756 cdm_manager_ = new RendererCdmManager(this); 3811 cdm_manager_ = new RendererCdmManager(this);
3757 return cdm_manager_; 3812 return cdm_manager_;
3758 } 3813 }
3759 #endif // defined(ENABLE_BROWSER_CDMS) 3814 #endif // defined(ENABLE_BROWSER_CDMS)
3760 3815
3761 } // namespace content 3816 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698