Commit 0316e142 authored by jww@chromium.org's avatar jww@chromium.org

Update getUserMedia counts to count Promise API and secure origin use

Previously, only insecure origin use of getUserMedia was counted with
RAPPOR. This adds RAPPOR counts for secure origin use. Additionally,
this updates the Promise version of the API (still behind a flag) to use
all the counts as well.

Review URL: https://codereview.chromium.org/1307663003

git-svn-id: svn://svn.chromium.org/blink/trunk@201433 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent b19d96ca
......@@ -155,6 +155,8 @@ void OriginsUsingFeatures::Value::recordOriginToRappor(const String& origin)
Platform::current()->recordRappor("PowerfulFeatureUse.Host.Geolocation.Insecure", origin);
if (get(Feature::GetUserMediaInsecureOrigin))
Platform::current()->recordRappor("PowerfulFeatureUse.Host.GetUserMedia.Insecure", origin);
if (get(Feature::GetUserMediaSecureOrigin))
Platform::current()->recordRappor("PowerfulFeatureUse.Host.GetUserMedia.Secure", origin);
}
void OriginsUsingFeatures::Value::recordNameToRappor(const String& name)
......
......@@ -23,6 +23,7 @@ class CORE_EXPORT OriginsUsingFeatures {
public:
~OriginsUsingFeatures();
// Features for RAPPOR. Do not reorder or remove!
enum class Feature {
ElementCreateShadowRoot,
DocumentRegisterElement,
......@@ -32,6 +33,7 @@ public:
FullscreenInsecureOrigin,
GeolocationInsecureOrigin,
GetUserMediaInsecureOrigin,
GetUserMediaSecureOrigin,
NumberOfFeatures // This must be the last item.
};
......
......@@ -106,7 +106,7 @@ ScriptPromise MediaDevices::getUserMedia(ScriptState* scriptState, const MediaSt
}
String errorMessage;
if (!document->isPrivilegedContext(errorMessage)) {
if (!request->isPrivilegedContextUse(errorMessage)) {
return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, errorMessage));
}
......
......@@ -29,9 +29,7 @@
#include "core/dom/ExceptionCode.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/Navigator.h"
#include "core/frame/OriginsUsingFeatures.h"
#include "core/frame/Settings.h"
#include "core/frame/UseCounter.h"
#include "core/page/Page.h"
#include "modules/mediastream/MediaDevicesRequest.h"
#include "modules/mediastream/MediaStreamConstraints.h"
......@@ -39,7 +37,6 @@
#include "modules/mediastream/NavigatorUserMediaSuccessCallback.h"
#include "modules/mediastream/UserMediaController.h"
#include "modules/mediastream/UserMediaRequest.h"
#include "platform/weborigin/SecurityOrigin.h"
namespace blink {
......@@ -69,11 +66,7 @@ void NavigatorMediaStream::webkitGetUserMedia(Navigator& navigator, const MediaS
}
String errorMessage;
if (navigator.frame()->document()->isPrivilegedContext(errorMessage)) {
UseCounter::count(navigator.frame(), UseCounter::GetUserMediaSecureOrigin);
} else {
UseCounter::countDeprecation(navigator.frame(), UseCounter::GetUserMediaInsecureOrigin);
OriginsUsingFeatures::countAnyWorld(*navigator.frame()->document(), OriginsUsingFeatures::Feature::GetUserMediaInsecureOrigin);
if (!request->isPrivilegedContextUse(errorMessage)) {
request->failPermissionDenied(errorMessage);
return;
}
......
......@@ -39,6 +39,7 @@
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
#include "core/dom/SpaceSplitString.h"
#include "core/frame/UseCounter.h"
#include "modules/mediastream/MediaConstraintsImpl.h"
#include "modules/mediastream/MediaStream.h"
#include "modules/mediastream/MediaStreamConstraints.h"
......@@ -116,6 +117,23 @@ WebMediaConstraints UserMediaRequest::videoConstraints() const
return m_video;
}
bool UserMediaRequest::isPrivilegedContextUse(String& errorMessage)
{
Document* document = ownerDocument();
if (document->isPrivilegedContext(errorMessage)) {
UseCounter::count(document->frame(), UseCounter::GetUserMediaSecureOrigin);
OriginsUsingFeatures::countAnyWorld(*document, OriginsUsingFeatures::Feature::GetUserMediaSecureOrigin);
return true;
}
// While getUserMedia is blocked on insecure origins, we still want to
// count attempts to use it.
UseCounter::countDeprecation(document->frame(), UseCounter::GetUserMediaInsecureOrigin);
OriginsUsingFeatures::countAnyWorld(*document, OriginsUsingFeatures::Feature::GetUserMediaInsecureOrigin);
return false;
}
Document* UserMediaRequest::ownerDocument()
{
if (ExecutionContext* context = executionContext()) {
......
......@@ -32,6 +32,7 @@
#define UserMediaRequest_h
#include "core/dom/ActiveDOMObject.h"
#include "core/frame/OriginsUsingFeatures.h"
#include "modules/ModulesExport.h"
#include "modules/mediastream/NavigatorUserMediaErrorCallback.h"
#include "modules/mediastream/NavigatorUserMediaSuccessCallback.h"
......@@ -71,6 +72,10 @@ public:
WebMediaConstraints audioConstraints() const;
WebMediaConstraints videoConstraints() const;
// errorMessage is only set if requestIsPrivilegedContext() returns |false|.
// Caller is responsible for properly setting errors and canceling request.
bool isPrivilegedContextUse(String& errorMessage);
// ContextLifecycleObserver
void contextDestroyed() override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment