1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.h" 6 7 #include "base/bind.h" 8 #include "base/message_loop/message_loop.h" 9 #include "chrome/browser/chrome_notification_types.h" 10 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" 11 #include "content/public/browser/notification_service.h" 12 13 ContextMenuNotificationObserver::ContextMenuNotificationObserver( 14 int command_to_execute) 15 : command_to_execute_(command_to_execute) { 16 registrar_.Add(this, 17 chrome::NOTIFICATION_RENDER_VIEW_CONTEXT_MENU_SHOWN, 18 content::NotificationService::AllSources()); 19 } 20 21 ContextMenuNotificationObserver::~ContextMenuNotificationObserver() { 22 } 23 24 void ContextMenuNotificationObserver::Observe( 25 int type, 26 const content::NotificationSource& source, 27 const content::NotificationDetails& details) { 28 switch (type) { 29 case chrome::NOTIFICATION_RENDER_VIEW_CONTEXT_MENU_SHOWN: { 30 RenderViewContextMenu* context_menu = 31 content::Source<RenderViewContextMenu>(source).ptr(); 32 base::MessageLoop::current()->PostTask( 33 FROM_HERE, 34 base::Bind(&ContextMenuNotificationObserver::ExecuteCommand, 35 base::Unretained(this), context_menu)); 36 break; 37 } 38 39 default: 40 NOTREACHED(); 41 } 42 } 43 44 void ContextMenuNotificationObserver::ExecuteCommand( 45 RenderViewContextMenu* context_menu) { 46 context_menu->ExecuteCommand(command_to_execute_, 0); 47 context_menu->Cancel(); 48 } 49