123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#ifndef EXTENSIONS_BROWSER_EXTENSION_HOST_DELEGATE_H_
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define EXTENSIONS_BROWSER_EXTENSION_HOST_DELEGATE_H_
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <string>
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/public/common/media_stream_request.h"
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/base/window_open_disposition.h"
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace content {
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class JavaScriptDialogManager;
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class WebContents;
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace gfx {
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class Rect;
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace extensions {
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class Extension;
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class ExtensionHost;
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// A delegate to support functionality that cannot exist in the extensions
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// module. This is not an inner class of ExtensionHost to allow it to be forward
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// declared.
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class ExtensionHostDelegate {
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual ~ExtensionHostDelegate() {}
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Called after the hosting |web_contents| for an extension is created. The
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // implementation may wish to add preference observers to |web_contents|.
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void OnExtensionHostCreated(content::WebContents* web_contents) = 0;
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Called after |host| creates a RenderView for an extension.
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void OnRenderViewCreatedForBackgroundPage(ExtensionHost* host) = 0;
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Returns the embedder's JavaScriptDialogManager or NULL if the embedder
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // does not support JavaScript dialogs.
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual content::JavaScriptDialogManager* GetJavaScriptDialogManager() = 0;
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Creates a new tab or popup window with |web_contents|. The embedder may
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // choose to do nothing if tabs and popups are not supported.
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void CreateTab(content::WebContents* web_contents,
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         const std::string& extension_id,
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         WindowOpenDisposition disposition,
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         const gfx::Rect& initial_pos,
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         bool user_gesture) = 0;
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Requests access to an audio or video media stream. Invokes |callback|
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // with the response.
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void ProcessMediaAccessRequest(
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      content::WebContents* web_contents,
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const content::MediaStreamRequest& request,
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const content::MediaResponseCallback& callback,
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const Extension* extension) = 0;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Checks if we have permission to access the microphone or camera. Note that
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // this does not query the user. |type| must be MEDIA_DEVICE_AUDIO_CAPTURE
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // or MEDIA_DEVICE_VIDEO_CAPTURE.
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CheckMediaAccessPermission(content::WebContents* web_contents,
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                          const GURL& security_origin,
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                          content::MediaStreamType type,
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                          const Extension* extension) = 0;
6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}  // namespace extensions
7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif  // EXTENSIONS_BROWSER_EXTENSION_HOST_DELEGATE_H_
72