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