15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef EXTENSIONS_BROWSER_APP_WINDOW_APP_WEB_CONTENTS_HELPER_H_
603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define EXTENSIONS_BROWSER_APP_WINDOW_APP_WEB_CONTENTS_HELPER_H_
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/common/console_message_level.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/common/media_stream_request.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace blink {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WebGestureEvent;
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace content {
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class BrowserContext;
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)struct OpenURLParams;
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WebContents;
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions {
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AppDelegate;
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class Extension;
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Provides common functionality for apps and launcher pages to respond to
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// messages from a WebContents.
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AppWebContentsHelper {
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AppWebContentsHelper(content::BrowserContext* browser_context,
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       const std::string& extension_id,
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       content::WebContents* web_contents,
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       AppDelegate* app_delegate);
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Returns true if the given |event| should not be handled by the renderer.
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static bool ShouldSuppressGestureEvent(const blink::WebGestureEvent& event);
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Opens a new URL inside the passed in WebContents. See WebContentsDelegate.
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  content::WebContents* OpenURLFromTab(
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const content::OpenURLParams& params) const;
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Requests to lock the mouse. See WebContentsDelegate.
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void RequestToLockMouse() const;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Asks permission to use the camera and/or microphone. See
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // WebContentsDelegate.
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void RequestMediaAccessPermission(
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const content::MediaStreamRequest& request,
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const content::MediaResponseCallback& callback) const;
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Checks permission to use the camera or microphone. See
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // WebContentsDelegate.
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool CheckMediaAccessPermission(const GURL& security_origin,
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                  content::MediaStreamType type) const;
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  const Extension* GetExtension() const;
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Helper method to add a message to the renderer's DevTools console.
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void AddMessageToDevToolsConsole(content::ConsoleMessageLevel level,
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                   const std::string& message) const;
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // The browser context with which this window is associated.
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // AppWindowWebContentsDelegate does not own this object.
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  content::BrowserContext* browser_context_;
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const std::string extension_id_;
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  content::WebContents* web_contents_;
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AppDelegate* app_delegate_;
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppWebContentsHelper);
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace extensions
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif  // EXTENSIONS_BROWSER_APP_WINDOW_APP_WEB_CONTENTS_HELPER_H_
79