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 #import "chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_
mac.h" | 5 #import "chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_
mac.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/profiler/scoped_tracker.h" | 9 #include "base/profiler/scoped_tracker.h" |
10 #import "chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegat
e.h" | 10 #import "chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegat
e.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 // TODO(erikchen): Remove ScopedTracker below once crbug.com/458401 is fixed. | 50 // TODO(erikchen): Remove ScopedTracker below once crbug.com/458401 is fixed. |
51 tracked_objects::ScopedTracker tracking_profile( | 51 tracked_objects::ScopedTracker tracking_profile( |
52 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 52 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
53 "458401 ChromeWebContentsViewDelegateMac::ShowContextMenu")); | 53 "458401 ChromeWebContentsViewDelegateMac::ShowContextMenu")); |
54 ShowMenu( | 54 ShowMenu( |
55 BuildMenu(content::WebContents::FromRenderFrameHost(render_frame_host), | 55 BuildMenu(content::WebContents::FromRenderFrameHost(render_frame_host), |
56 params)); | 56 params)); |
57 } | 57 } |
58 | 58 |
59 void ChromeWebContentsViewDelegateMac::ShowMenu( | 59 void ChromeWebContentsViewDelegateMac::ShowMenu( |
60 scoped_ptr<RenderViewContextMenuBase> menu) { | 60 std::unique_ptr<RenderViewContextMenuBase> menu) { |
61 // TODO(erikchen): Remove ScopedTracker below once crbug.com/458401 is fixed. | 61 // TODO(erikchen): Remove ScopedTracker below once crbug.com/458401 is fixed. |
62 tracked_objects::ScopedTracker tracking_profile( | 62 tracked_objects::ScopedTracker tracking_profile( |
63 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 63 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
64 "458401 ChromeWebContentsViewDelegateMac::ShowMenu")); | 64 "458401 ChromeWebContentsViewDelegateMac::ShowMenu")); |
65 | 65 |
66 context_menu_ = std::move(menu); | 66 context_menu_ = std::move(menu); |
67 if (!context_menu_.get()) | 67 if (!context_menu_.get()) |
68 return; | 68 return; |
69 | 69 |
70 // The renderer may send the "show context menu" message multiple times, one | 70 // The renderer may send the "show context menu" message multiple times, one |
71 // for each right click mouse event it receives. Normally, this doesn't happen | 71 // for each right click mouse event it receives. Normally, this doesn't happen |
72 // because mouse events are not forwarded once the context menu is showing. | 72 // because mouse events are not forwarded once the context menu is showing. |
73 // However, there's a race - the context menu may not yet be showing when | 73 // However, there's a race - the context menu may not yet be showing when |
74 // the second mouse event arrives. In this case, |ShowContextMenu()| will | 74 // the second mouse event arrives. In this case, |ShowContextMenu()| will |
75 // get called multiple times - if so, don't create another context menu. | 75 // get called multiple times - if so, don't create another context menu. |
76 // TODO(asvitkine): Fix the renderer so that it doesn't do this. | 76 // TODO(asvitkine): Fix the renderer so that it doesn't do this. |
77 content::RenderWidgetHostView* widget_view = GetActiveRenderWidgetHostView(); | 77 content::RenderWidgetHostView* widget_view = GetActiveRenderWidgetHostView(); |
78 if (widget_view && widget_view->IsShowingContextMenu()) | 78 if (widget_view && widget_view->IsShowingContextMenu()) |
79 return; | 79 return; |
80 | 80 |
81 context_menu_->Show(); | 81 context_menu_->Show(); |
82 } | 82 } |
83 | 83 |
84 scoped_ptr<RenderViewContextMenuBase> | 84 std::unique_ptr<RenderViewContextMenuBase> |
85 ChromeWebContentsViewDelegateMac::BuildMenu( | 85 ChromeWebContentsViewDelegateMac::BuildMenu( |
86 content::WebContents* web_contents, | 86 content::WebContents* web_contents, |
87 const content::ContextMenuParams& params) { | 87 const content::ContextMenuParams& params) { |
88 // TODO(erikchen): Remove ScopedTracker below once crbug.com/458401 is fixed. | 88 // TODO(erikchen): Remove ScopedTracker below once crbug.com/458401 is fixed. |
89 tracked_objects::ScopedTracker tracking_profile1( | 89 tracked_objects::ScopedTracker tracking_profile1( |
90 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 90 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
91 "458401 ChromeWebContentsViewDelegateMac::BuildMenu")); | 91 "458401 ChromeWebContentsViewDelegateMac::BuildMenu")); |
92 scoped_ptr<RenderViewContextMenuBase> menu; | 92 std::unique_ptr<RenderViewContextMenuBase> menu; |
93 content::RenderFrameHost* focused_frame = web_contents->GetFocusedFrame(); | 93 content::RenderFrameHost* focused_frame = web_contents->GetFocusedFrame(); |
94 // If the frame tree does not have a focused frame at this point, do not | 94 // If the frame tree does not have a focused frame at this point, do not |
95 // bother creating RenderViewContextMenuMac. | 95 // bother creating RenderViewContextMenuMac. |
96 // This happens if the frame has navigated to a different page before | 96 // This happens if the frame has navigated to a different page before |
97 // ContextMenu message was received by the current RenderFrameHost. | 97 // ContextMenu message was received by the current RenderFrameHost. |
98 if (focused_frame) { | 98 if (focused_frame) { |
99 content::RenderWidgetHostView* widget_view = | 99 content::RenderWidgetHostView* widget_view = |
100 GetActiveRenderWidgetHostView(); | 100 GetActiveRenderWidgetHostView(); |
101 | 101 |
102 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458401 | 102 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458401 |
(...skipping 23 matching lines...) Expand all Loading... |
126 } | 126 } |
127 | 127 |
128 namespace chrome { | 128 namespace chrome { |
129 | 129 |
130 content::WebContentsViewDelegate* CreateWebContentsViewDelegate( | 130 content::WebContentsViewDelegate* CreateWebContentsViewDelegate( |
131 content::WebContents* web_contents) { | 131 content::WebContents* web_contents) { |
132 return new ChromeWebContentsViewDelegateMac(web_contents); | 132 return new ChromeWebContentsViewDelegateMac(web_contents); |
133 } | 133 } |
134 | 134 |
135 } // namespace chrome | 135 } // namespace chrome |
OLD | NEW |