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)#include "chrome/browser/extensions/chrome_extension_host_delegate.h"
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/extensions/extension_tab_util.h"
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h"
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.h"
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_host.h"
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_system.h"
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace extensions {
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ChromeExtensionHostDelegate::ChromeExtensionHostDelegate() {}
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ChromeExtensionHostDelegate::~ChromeExtensionHostDelegate() {}
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ChromeExtensionHostDelegate::OnExtensionHostCreated(
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    content::WebContents* web_contents) {
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ChromeExtensionWebContentsObserver::CreateForWebContents(web_contents);
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  PrefsTabHelper::CreateForWebContents(web_contents);
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ChromeExtensionHostDelegate::OnRenderViewCreatedForBackgroundPage(
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ExtensionHost* host) {
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ExtensionService* service =
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      ExtensionSystem::Get(host->browser_context())->extension_service();
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (service)
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    service->DidCreateRenderViewForBackgroundPage(host);
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)content::JavaScriptDialogManager*
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ChromeExtensionHostDelegate::GetJavaScriptDialogManager() {
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return GetJavaScriptDialogManagerInstance();
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ChromeExtensionHostDelegate::CreateTab(content::WebContents* web_contents,
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                            const std::string& extension_id,
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                            WindowOpenDisposition disposition,
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                            const gfx::Rect& initial_pos,
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                            bool user_gesture) {
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ExtensionTabUtil::CreateTab(
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      web_contents, extension_id, disposition, initial_pos, user_gesture);
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ChromeExtensionHostDelegate::ProcessMediaAccessRequest(
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    content::WebContents* web_contents,
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const content::MediaStreamRequest& request,
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const content::MediaResponseCallback& callback,
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const Extension* extension) {
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  MediaCaptureDevicesDispatcher::GetInstance()->ProcessMediaAccessRequest(
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      web_contents, request, callback, extension);
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromeExtensionHostDelegate::CheckMediaAccessPermission(
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content::WebContents* web_contents,
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const GURL& security_origin,
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content::MediaStreamType type,
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const Extension* extension) {
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return MediaCaptureDevicesDispatcher::GetInstance()
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ->CheckMediaAccessPermission(
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          web_contents, security_origin, type, extension);
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}  // namespace extensions
70