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

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: rebase 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
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_view_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 IPC_MESSAGE_HANDLER(FrameMsg_DisownOpener, OnDisownOpener) 789 IPC_MESSAGE_HANDLER(FrameMsg_DisownOpener, OnDisownOpener)
781 #if defined(OS_MACOSX) 790 #if defined(OS_ANDROID)
791 IPC_MESSAGE_HANDLER(FrameMsg_SelectPopupMenuItems, OnSelectPopupMenuItems)
792 #elif defined(OS_MACOSX)
793 IPC_MESSAGE_HANDLER(FrameMsg_SelectPopupMenuItem, OnSelectPopupMenuItem)
782 IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard) 794 IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard)
783 #endif 795 #endif
784 IPC_END_MESSAGE_MAP() 796 IPC_END_MESSAGE_MAP()
785 797
786 return handled; 798 return handled;
787 } 799 }
788 800
789 void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) { 801 void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) {
790 MaybeHandleDebugURL(params.url); 802 MaybeHandleDebugURL(params.url);
791 if (!render_view_->webview()) 803 if (!render_view_->webview())
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 void RenderFrameImpl::OnDisownOpener() { 1288 void RenderFrameImpl::OnDisownOpener() {
1277 // TODO(creis): We should only see this for main frames for now. To support 1289 // TODO(creis): We should only see this for main frames for now. To support
1278 // disowning the opener on subframes, we will need to move WebContentsImpl's 1290 // disowning the opener on subframes, we will need to move WebContentsImpl's
1279 // opener_ to FrameTreeNode. 1291 // opener_ to FrameTreeNode.
1280 CHECK(!frame_->parent()); 1292 CHECK(!frame_->parent());
1281 1293
1282 if (frame_->opener()) 1294 if (frame_->opener())
1283 frame_->setOpener(NULL); 1295 frame_->setOpener(NULL);
1284 } 1296 }
1285 1297
1298 #if defined(OS_ANDROID)
1299 void RenderFrameImpl::OnSelectPopupMenuItems(
1300 bool canceled,
1301 const std::vector<int>& selected_indices) {
1302 // It is possible to receive more than one of these calls if the user presses
1303 // a select faster than it takes for the show-select-popup IPC message to make
1304 // it to the browser UI thread. Ignore the extra-messages.
1305 // TODO(jcivelli): http:/b/5793321 Implement a better fix, as detailed in bug.
1306 if (!external_popup_menu_)
1307 return;
1308
1309 external_popup_menu_->DidSelectItems(canceled, selected_indices);
1310 external_popup_menu_.reset();
1311 }
1312 #endif
1313
1314 #if defined(OS_MACOSX)
1315 void RenderFrameImpl::OnSelectPopupMenuItem(int selected_index) {
1316 if (external_popup_menu_ == NULL)
1317 return;
1318 external_popup_menu_->DidSelectItem(selected_index);
1319 external_popup_menu_.reset();
1320 }
1321 #endif
1322
1286 void RenderFrameImpl::OnReload(bool ignore_cache) { 1323 void RenderFrameImpl::OnReload(bool ignore_cache) {
1287 frame_->reload(ignore_cache); 1324 frame_->reload(ignore_cache);
1288 } 1325 }
1289 1326
1290 void RenderFrameImpl::OnTextSurroundingSelectionRequest(size_t max_length) { 1327 void RenderFrameImpl::OnTextSurroundingSelectionRequest(size_t max_length) {
1291 blink::WebSurroundingText surroundingText; 1328 blink::WebSurroundingText surroundingText;
1292 surroundingText.initialize(frame_->selectionRange(), max_length); 1329 surroundingText.initialize(frame_->selectionRange(), max_length);
1293 1330
1294 if (surroundingText.isNull()) { 1331 if (surroundingText.isNull()) {
1295 // |surroundingText| might not be correctly initialized, for example if 1332 // |surroundingText| might not be correctly initialized, for example if
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
1572 if (!frame || !frame->view()) 1609 if (!frame || !frame->view())
1573 return NULL; 1610 return NULL;
1574 DCHECK(!frame_ || frame_ == frame); 1611 DCHECK(!frame_ || frame_ == frame);
1575 return GetContentClient()->renderer()->CreateWorkerPermissionClientProxy( 1612 return GetContentClient()->renderer()->CreateWorkerPermissionClientProxy(
1576 this, frame); 1613 this, frame);
1577 } 1614 }
1578 1615
1579 WebExternalPopupMenu* RenderFrameImpl::createExternalPopupMenu( 1616 WebExternalPopupMenu* RenderFrameImpl::createExternalPopupMenu(
1580 const WebPopupMenuInfo& popup_menu_info, 1617 const WebPopupMenuInfo& popup_menu_info,
1581 WebExternalPopupMenuClient* popup_menu_client) { 1618 WebExternalPopupMenuClient* popup_menu_client) {
1582 return render_view_->createExternalPopupMenu(popup_menu_info, 1619 #if defined(OS_MACOSX) || defined(OS_ANDROID)
1583 popup_menu_client); 1620 // An IPC message is sent to the browser to build and display the actual
1621 // popup. The user could have time to click a different select by the time
1622 // the popup is shown. In that case external_popup_menu_ is non NULL.
1623 // By returning NULL in that case, we instruct Blink to cancel that new
1624 // popup. So from the user perspective, only the first one will show, and
1625 // will have to close the first one before another one can be shown.
1626 if (external_popup_menu_)
1627 return NULL;
1628 external_popup_menu_.reset(
1629 new ExternalPopupMenu(this, popup_menu_info, popup_menu_client));
1630 if (render_view_->screen_metrics_emulator_) {
1631 render_view_->SetExternalPopupOriginAdjustmentsForEmulation(
1632 external_popup_menu_.get(),
1633 render_view_->screen_metrics_emulator_.get());
1634 }
1635 return external_popup_menu_.get();
1636 #else
1637 return NULL;
1638 #endif
1584 } 1639 }
1585 1640
1586 blink::WebCookieJar* RenderFrameImpl::cookieJar(blink::WebLocalFrame* frame) { 1641 blink::WebCookieJar* RenderFrameImpl::cookieJar(blink::WebLocalFrame* frame) {
1587 DCHECK(!frame_ || frame_ == frame); 1642 DCHECK(!frame_ || frame_ == frame);
1588 return &cookie_jar_; 1643 return &cookie_jar_;
1589 } 1644 }
1590 1645
1591 blink::WebServiceWorkerProvider* RenderFrameImpl::createServiceWorkerProvider( 1646 blink::WebServiceWorkerProvider* RenderFrameImpl::createServiceWorkerProvider(
1592 blink::WebLocalFrame* frame) { 1647 blink::WebLocalFrame* frame) {
1593 DCHECK(!frame_ || frame_ == frame); 1648 DCHECK(!frame_ || frame_ == frame);
(...skipping 2171 matching lines...) Expand 10 before | Expand all | Expand 10 after
3765 3820
3766 #if defined(ENABLE_BROWSER_CDMS) 3821 #if defined(ENABLE_BROWSER_CDMS)
3767 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 3822 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
3768 if (!cdm_manager_) 3823 if (!cdm_manager_)
3769 cdm_manager_ = new RendererCdmManager(this); 3824 cdm_manager_ = new RendererCdmManager(this);
3770 return cdm_manager_; 3825 return cdm_manager_;
3771 } 3826 }
3772 #endif // defined(ENABLE_BROWSER_CDMS) 3827 #endif // defined(ENABLE_BROWSER_CDMS)
3773 3828
3774 } // namespace content 3829 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_view_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698