1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef CHROME_BROWSER_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_BROWSERTEST_UTIL_H_
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CHROME_BROWSER_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_BROWSERTEST_UTIL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/string16.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/context_menu_params.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewContextMenu;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContextMenuNotificationObserver : public content::NotificationObserver {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Wait for a context menu to be shown, and then execute |command_to_execute|.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ContextMenuNotificationObserver(int command_to_execute);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ContextMenuNotificationObserver();
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ExecuteCommand(RenderViewContextMenu* context_menu);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationRegistrar registrar_;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int command_to_execute_;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ContextMenuNotificationObserver);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SaveLinkAsContextMenuObserver : public ContextMenuNotificationObserver {
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Register to listen for notifications of
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // NOTIFICATION_RENDER_VIEW_CONTEXT_MENU_SHOWN from either
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // a specific source, or from all sources if |source| is
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // NotificationService::AllSources().
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  explicit SaveLinkAsContextMenuObserver(
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const content::NotificationSource& source);
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~SaveLinkAsContextMenuObserver();
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Suggested filename for file downloaded through "Save Link As" option.
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::string16 GetSuggestedFilename();
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Wait for context menu to be visible.
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void WaitForMenu();
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Observe(int type,
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                       const content::NotificationSource& source,
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                       const content::NotificationDetails& details) OVERRIDE;
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void Cancel(RenderViewContextMenu* context_menu);
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool menu_visible_;
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  content::ContextMenuParams params_;
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(SaveLinkAsContextMenuObserver);
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif  // CHROME_BROWSER_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_BROWSERTEST_UTIL_H_
65