1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/media_utils.h"
6
7#include "chrome/browser/media/media_capture_devices_dispatcher.h"
8#include "chrome/browser/profiles/profile.h"
9#include "content/public/browser/web_contents.h"
10
11#if defined(ENABLE_EXTENSIONS)
12#include "chrome/browser/extensions/extension_service.h"
13#include "extensions/browser/extension_system.h"
14#include "extensions/common/constants.h"
15#endif
16
17namespace {
18
19#if defined(ENABLE_EXTENSIONS)
20const extensions::Extension* GetExtensionForOrigin(Profile* profile,
21                                             const GURL& security_origin) {
22  if (!security_origin.SchemeIs(extensions::kExtensionScheme))
23    return NULL;
24
25  ExtensionService* extensions_service =
26      extensions::ExtensionSystem::Get(profile)->extension_service();
27  const extensions::Extension* extension =
28      extensions_service->extensions()->GetByID(security_origin.host());
29  DCHECK(extension);
30  return extension;
31}
32#endif
33
34}  // namespace
35
36void RequestMediaAccessPermission(
37    content::WebContents* web_contents,
38    Profile* profile,
39    const content::MediaStreamRequest& request,
40    const content::MediaResponseCallback& callback) {
41  const extensions::Extension* extension = NULL;
42#if defined(ENABLE_EXTENSIONS)
43  extension = GetExtensionForOrigin(profile, request.security_origin);
44#endif
45  MediaCaptureDevicesDispatcher::GetInstance()->ProcessMediaAccessRequest(
46      web_contents, request, callback, extension);
47}
48
49bool CheckMediaAccessPermission(content::WebContents* web_contents,
50                                const GURL& security_origin,
51                                content::MediaStreamType type) {
52#if defined(ENABLE_EXTENSIONS)
53  Profile* profile =
54      Profile::FromBrowserContext(web_contents->GetBrowserContext());
55  const extensions::Extension* extension =
56      GetExtensionForOrigin(profile, security_origin);
57  if (extension) {
58    return MediaCaptureDevicesDispatcher::GetInstance()
59        ->CheckMediaAccessPermission(
60            web_contents, security_origin, type, extension);
61  }
62  return MediaCaptureDevicesDispatcher::GetInstance()
63      ->CheckMediaAccessPermission(web_contents, security_origin, type);
64#else
65  return MediaCaptureDevicesDispatcher::GetInstance()
66      ->CheckMediaAccessPermission(web_contents, security_origin, type);
67#endif
68}
69