1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/media_preview/media_preview_feature.h"
#include "base/feature_list.h"
#include "base/time/time.h"
#include "chrome/browser/ui/views/media_preview/media_preview_metrics.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/origin_trials_controller_delegate.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/mojom/origin_trials/origin_trial_feature.mojom-shared.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace media_preview_feature {
namespace {
bool IsCameraMicPreviewFlagEnabled() {
return base::FeatureList::IsEnabled(blink::features::kCameraMicPreview);
}
} // namespace
bool ShouldShowMediaPreview(content::BrowserContext& browser_context,
const GURL& requesting_origin_url,
const GURL& embedding_origin_url,
media_preview_metrics::UiLocation ui_location) {
// If we somehow get invalid or opaque origins, it's a corner case like a
// data:, srcdoc:, or about: document that can't be part of the OT.
if (!embedding_origin_url.is_valid() && !requesting_origin_url.is_valid()) {
media_preview_metrics::RecordOriginTrialAllowed(ui_location, true);
return IsCameraMicPreviewFlagEnabled();
}
content::OriginTrialsControllerDelegate* origin_trials =
browser_context.GetOriginTrialsControllerDelegate();
// Incognito and guest profiles don't have an origin trials controller, so
// they will just depend on the feature flag.
if (!origin_trials) {
media_preview_metrics::RecordOriginTrialAllowed(ui_location, true);
return IsCameraMicPreviewFlagEnabled();
}
// The URLs passed in originate a url::Origin, so this is safe.
url::Origin requesting_origin = url::Origin::Create(requesting_origin_url);
url::Origin embedding_origin = url::Origin::Create(embedding_origin_url);
base::Time now = base::Time::Now();
if (origin_trials->IsFeaturePersistedForOrigin(
requesting_origin, requesting_origin,
blink::mojom::OriginTrialFeature::kMediaPreviewsOptOut, now)) {
media_preview_metrics::RecordOriginTrialAllowed(ui_location, false);
return false;
}
if (embedding_origin != requesting_origin &&
origin_trials->IsFeaturePersistedForOrigin(
embedding_origin, embedding_origin,
blink::mojom::OriginTrialFeature::kMediaPreviewsOptOut, now)) {
media_preview_metrics::RecordOriginTrialAllowed(ui_location, false);
return false;
}
media_preview_metrics::RecordOriginTrialAllowed(ui_location, true);
return IsCameraMicPreviewFlagEnabled();
}
} // namespace media_preview_feature
|