Changeset 252854 in webkit


Ignore:
Timestamp:
Nov 25, 2019 5:03:24 AM (4 years ago)
Author:
youenn@apple.com
Message:

Enable legacy getUserMedia as a quirk
https://bugs.webkit.org/show_bug.cgi?id=204403
<rdar://problem/56421276>

Reviewed by Eric Carlson.

Add a shim for legacy getUserMedia to cover uses of this legacy API for existing web pages.
Add a corresponding settings and quirk.
Covered by manual test.

  • Modules/mediastream/NavigatorMediaDevices.idl:
  • bindings/js/JSDOMBindingInternals.js:
  • bindings/js/JSNavigatorCustom.cpp:

(WebCore::JSNavigator::getUserMedia):

  • dom/Document.cpp:

(WebCore::m_undoManager):

  • page/Quirks.cpp:

(WebCore::Quirks::shouldEnableLegacyGetUserMedia const):

  • page/Quirks.h:
  • page/Settings.yaml:
Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252852 r252854  
     12019-11-25  Youenn Fablet  <youenn@apple.com>
     2
     3        Enable legacy getUserMedia as a quirk
     4        https://bugs.webkit.org/show_bug.cgi?id=204403
     5        <rdar://problem/56421276>
     6
     7        Reviewed by Eric Carlson.
     8
     9        Add a shim for legacy getUserMedia to cover uses of this legacy API for existing web pages.
     10        Add a corresponding settings and quirk.
     11        Covered by manual test.
     12
     13        * Modules/mediastream/NavigatorMediaDevices.idl:
     14        * bindings/js/JSDOMBindingInternals.js:
     15        * bindings/js/JSNavigatorCustom.cpp:
     16        (WebCore::JSNavigator::getUserMedia):
     17        * dom/Document.cpp:
     18        (WebCore::m_undoManager):
     19        * page/Quirks.cpp:
     20        (WebCore::Quirks::shouldEnableLegacyGetUserMedia const):
     21        * page/Quirks.h:
     22        * page/Settings.yaml:
     23
    1242019-11-25  Charlie Turner  <cturner@igalia.com>
    225
  • trunk/Source/WebCore/Modules/mediastream/NavigatorMediaDevices.idl

    r241602 r252854  
    3434] partial interface Navigator {
    3535    [SameObject, SecureContext, ContextAllowsMediaDevices] readonly attribute MediaDevices mediaDevices;
     36    [Custom, EnabledBySetting=LegacyGetUserMedia] void getUserMedia(object constraints, object? successCallback, object? errorCallback);
    3637};
  • trunk/Source/WebCore/bindings/js/JSDOMBindingInternals.js

    r230637 r252854  
    3333    });
    3434}
     35
     36function getUserMediaShim(constraints, successCallback, errorCallback)
     37{
     38    this.mediaDevices.getUserMedia(constraints).then(successCallback, errorCallback);
     39}
  • trunk/Source/WebCore/bindings/js/JSNavigatorCustom.cpp

    r248276 r252854  
    2727#include "JSNavigator.h"
    2828
     29#include "WebCoreJSClientData.h"
     30#include <JavaScriptCore/CatchScope.h>
     31
    2932namespace WebCore {
    3033
     
    3437}
    3538
     39#if ENABLE(MEDIA_STREAM)
     40JSValue JSNavigator::getUserMedia(JSGlobalObject& lexicalGlobalObject, CallFrame& callFrame)
     41{
     42    auto* function = globalObject()->builtinInternalFunctions().jsDOMBindingInternals().m_getUserMediaShimFunction.get();
     43    ASSERT(function);
     44
     45    JSC::CallData callData;
     46    JSC::CallType callType = JSC::getCallData(lexicalGlobalObject.vm(), function, callData);
     47    ASSERT(callType != JSC::CallType::None);
     48    JSC::MarkedArgumentBuffer arguments;
     49    for (size_t cptr = 0; cptr < callFrame.argumentCount(); ++cptr)
     50        arguments.append(callFrame.uncheckedArgument(cptr));
     51    ASSERT(!arguments.hasOverflowed());
     52    JSC::call(&lexicalGlobalObject, function, callType, callData, this, arguments);
     53    return jsUndefined();
    3654}
     55#endif
     56
     57}
  • trunk/Source/WebCore/dom/Document.cpp

    r252828 r252854  
    608608
    609609    InspectorInstrumentation::addEventListenersToNode(*this);
     610#if ENABLE(MEDIA_STREAM)
     611    m_settings->setLegacyGetUserMediaEnabled(quirks().shouldEnableLegacyGetUserMedia());
     612#endif
    610613}
    611614
  • trunk/Source/WebCore/page/Quirks.cpp

    r252301 r252854  
    630630}
    631631
    632 }
     632#if ENABLE(MEDIA_STREAM)
     633bool Quirks::shouldEnableLegacyGetUserMedia() const
     634{
     635    if (!needsQuirks())
     636        return false;
     637
     638    return m_document->url().protocolIs("https") && equalLettersIgnoringASCIICase(m_document-> url().host(), "www.baidu.com");
     639}
     640#endif
     641
     642}
  • trunk/Source/WebCore/page/Quirks.h

    r252301 r252854  
    8585    bool shouldBypassBackForwardCache() const;
    8686
     87#if ENABLE(MEDIA_STREAM)
     88    bool shouldEnableLegacyGetUserMedia() const;
     89#endif
     90
    8791private:
    8892    bool needsQuirks() const;
  • trunk/Source/WebCore/page/Settings.yaml

    r252840 r252854  
    890890  initial: false
    891891
     892legacyGetUserMediaEnabled:
     893  initial: false
     894  conditional: MEDIA_STREAM
     895
    892896# Deprecated
    893897
Note: See TracChangeset for help on using the changeset viewer.