Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Unified Diff: chrome/browser/media/permission_bubble_media_access_handler.cc

Issue 2307083002: Cleanup: move WebRTC related files from chrome/browser/media to chrome/browser/media/webrtc/ (Closed)
Patch Set: Removed file wrongly resuscitated during rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/media/permission_bubble_media_access_handler.h ('k') | chrome/browser/media/rtp_dump_type.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/media/permission_bubble_media_access_handler.cc
diff --git a/chrome/browser/media/permission_bubble_media_access_handler.cc b/chrome/browser/media/permission_bubble_media_access_handler.cc
deleted file mode 100644
index 4d2f7019f85d78f77070cf0875755cd086c66147..0000000000000000000000000000000000000000
--- a/chrome/browser/media/permission_bubble_media_access_handler.cc
+++ /dev/null
@@ -1,244 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/media/permission_bubble_media_access_handler.h"
-
-#include <utility>
-
-#include "base/metrics/field_trial.h"
-#include "chrome/browser/media/media_permission.h"
-#include "chrome/browser/media/media_stream_device_permissions.h"
-#include "chrome/browser/media/media_stream_devices_controller.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/features.h"
-#include "chrome/common/pref_names.h"
-#include "components/content_settings/core/browser/host_content_settings_map.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_types.h"
-#include "content/public/browser/web_contents.h"
-
-#if BUILDFLAG(ANDROID_JAVA_UI)
-#include <vector>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "chrome/browser/media/media_stream_infobar_delegate_android.h"
-#include "chrome/browser/permissions/permission_update_infobar_delegate_android.h"
-#else
-#include "chrome/browser/permissions/permission_request_manager.h"
-#endif // BUILDFLAG(ANDROID_JAVA_UI)
-
-#if BUILDFLAG(ANDROID_JAVA_UI)
-namespace {
-// Callback for the permission update infobar when the site and Chrome
-// permissions are mismatched on Android.
-void OnPermissionConflictResolved(
- std::unique_ptr<MediaStreamDevicesController> controller,
- bool allowed) {
- if (allowed)
- controller->PermissionGranted();
- else
- controller->ForcePermissionDeniedTemporarily();
-}
-} // namespace
-
-#endif // BUILDFLAG(ANDROID_JAVA_UI)
-
-using content::BrowserThread;
-
-struct PermissionBubbleMediaAccessHandler::PendingAccessRequest {
- PendingAccessRequest(const content::MediaStreamRequest& request,
- const content::MediaResponseCallback& callback)
- : request(request), callback(callback) {}
- ~PendingAccessRequest() {}
-
- // TODO(gbillock): make the MediaStreamDevicesController owned by
- // this object when we're using bubbles.
- content::MediaStreamRequest request;
- content::MediaResponseCallback callback;
-};
-
-PermissionBubbleMediaAccessHandler::PermissionBubbleMediaAccessHandler() {
- // PermissionBubbleMediaAccessHandler should be created on UI thread.
- // Otherwise, it will not receive
- // content::NOTIFICATION_WEB_CONTENTS_DESTROYED, and that will result in
- // possible use after free.
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- notifications_registrar_.Add(this,
- content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
- content::NotificationService::AllSources());
-}
-
-PermissionBubbleMediaAccessHandler::~PermissionBubbleMediaAccessHandler() {
-}
-
-bool PermissionBubbleMediaAccessHandler::SupportsStreamType(
- const content::MediaStreamType type,
- const extensions::Extension* extension) {
- return type == content::MEDIA_DEVICE_VIDEO_CAPTURE ||
- type == content::MEDIA_DEVICE_AUDIO_CAPTURE;
-}
-
-bool PermissionBubbleMediaAccessHandler::CheckMediaAccessPermission(
- content::WebContents* web_contents,
- const GURL& security_origin,
- content::MediaStreamType type,
- const extensions::Extension* extension) {
- Profile* profile =
- Profile::FromBrowserContext(web_contents->GetBrowserContext());
- ContentSettingsType content_settings_type =
- type == content::MEDIA_DEVICE_AUDIO_CAPTURE
- ? CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC
- : CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA;
-
- MediaPermission permission(content_settings_type, security_origin,
- web_contents->GetLastCommittedURL().GetOrigin(), profile);
- content::MediaStreamRequestResult unused;
- return permission.GetPermissionStatus(&unused) == CONTENT_SETTING_ALLOW;
-}
-
-void PermissionBubbleMediaAccessHandler::HandleRequest(
- content::WebContents* web_contents,
- const content::MediaStreamRequest& request,
- const content::MediaResponseCallback& callback,
- const extensions::Extension* extension) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- RequestsQueue& queue = pending_requests_[web_contents];
- queue.push_back(PendingAccessRequest(request, callback));
-
- // If this is the only request then show the infobar.
- if (queue.size() == 1)
- ProcessQueuedAccessRequest(web_contents);
-}
-
-void PermissionBubbleMediaAccessHandler::ProcessQueuedAccessRequest(
- content::WebContents* web_contents) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- std::map<content::WebContents*, RequestsQueue>::iterator it =
- pending_requests_.find(web_contents);
-
- if (it == pending_requests_.end() || it->second.empty()) {
- // Don't do anything if the tab was closed.
- return;
- }
-
- DCHECK(!it->second.empty());
-
- std::unique_ptr<MediaStreamDevicesController> controller(
- new MediaStreamDevicesController(
- web_contents, it->second.front().request,
- base::Bind(
- &PermissionBubbleMediaAccessHandler::OnAccessRequestResponse,
- base::Unretained(this), web_contents)));
- if (!controller->IsAskingForAudio() && !controller->IsAskingForVideo()) {
-#if BUILDFLAG(ANDROID_JAVA_UI)
- // If either audio or video was previously allowed and Chrome no longer has
- // the necessary permissions, show a infobar to attempt to address this
- // mismatch.
- std::vector<ContentSettingsType> content_settings_types;
- if (controller->IsAllowedForAudio())
- content_settings_types.push_back(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC);
-
- if (controller->IsAllowedForVideo()) {
- content_settings_types.push_back(
- CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA);
- }
- if (!content_settings_types.empty() &&
- PermissionUpdateInfoBarDelegate::ShouldShowPermissionInfobar(
- web_contents, content_settings_types)) {
- PermissionUpdateInfoBarDelegate::Create(
- web_contents, content_settings_types,
- base::Bind(
- &OnPermissionConflictResolved, base::Passed(&controller)));
- }
-#endif
- return;
- }
-
-#if BUILDFLAG(ANDROID_JAVA_UI)
- MediaStreamInfoBarDelegateAndroid::Create(web_contents,
- std::move(controller));
-#else
- PermissionRequestManager* permission_request_manager =
- PermissionRequestManager::FromWebContents(web_contents);
- if (permission_request_manager)
- permission_request_manager->AddRequest(controller.release());
-#endif
-}
-
-void PermissionBubbleMediaAccessHandler::UpdateMediaRequestState(
- int render_process_id,
- int render_frame_id,
- int page_request_id,
- content::MediaStreamType stream_type,
- content::MediaRequestState state) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (state != content::MEDIA_REQUEST_STATE_CLOSING)
- return;
-
- bool found = false;
- for (RequestsQueues::iterator rqs_it = pending_requests_.begin();
- rqs_it != pending_requests_.end(); ++rqs_it) {
- RequestsQueue& queue = rqs_it->second;
- for (RequestsQueue::iterator it = queue.begin(); it != queue.end(); ++it) {
- if (it->request.render_process_id == render_process_id &&
- it->request.render_frame_id == render_frame_id &&
- it->request.page_request_id == page_request_id) {
- queue.erase(it);
- found = true;
- break;
- }
- }
- if (found)
- break;
- }
-}
-
-void PermissionBubbleMediaAccessHandler::OnAccessRequestResponse(
- content::WebContents* web_contents,
- const content::MediaStreamDevices& devices,
- content::MediaStreamRequestResult result,
- std::unique_ptr<content::MediaStreamUI> ui) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- std::map<content::WebContents*, RequestsQueue>::iterator it =
- pending_requests_.find(web_contents);
- if (it == pending_requests_.end()) {
- // WebContents has been destroyed. Don't need to do anything.
- return;
- }
-
- RequestsQueue& queue(it->second);
- if (queue.empty())
- return;
-
- content::MediaResponseCallback callback = queue.front().callback;
- queue.pop_front();
-
- if (!queue.empty()) {
- // Post a task to process next queued request. It has to be done
- // asynchronously to make sure that calling infobar is not destroyed until
- // after this function returns.
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &PermissionBubbleMediaAccessHandler::ProcessQueuedAccessRequest,
- base::Unretained(this), web_contents));
- }
-
- callback.Run(devices, result, std::move(ui));
-}
-
-void PermissionBubbleMediaAccessHandler::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- DCHECK_EQ(content::NOTIFICATION_WEB_CONTENTS_DESTROYED, type);
-
- pending_requests_.erase(content::Source<content::WebContents>(source).ptr());
-}
« no previous file with comments | « chrome/browser/media/permission_bubble_media_access_handler.h ('k') | chrome/browser/media/rtp_dump_type.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698