Changeset 185903 in webkit


Ignore:
Timestamp:
Jun 24, 2015 12:42:55 AM (9 years ago)
Author:
youenn.fablet@crf.canon.fr
Message:

Refactor UserMediaRequest to share more codes between MediaDevices.getUserMedia and legacy webkitGetUserMedia
https://bugs.webkit.org/show_bug.cgi?id=146237

Reviewed by Darin Adler.

Covered by existing tests, no change in behavior.

  • Modules/mediastream/MediaConstraintsImpl.cpp:

(WebCore::MediaConstraintsImpl::create): Simplified error handling by removing exception code parameter.

  • Modules/mediastream/MediaConstraintsImpl.h: Ditto.
  • Modules/mediastream/MediaDevices.cpp:

(WebCore::MediaDevices::getUserMedia): Removed code now in UserMediaRequest::start.

  • Modules/mediastream/NavigatorUserMedia.cpp:

(WebCore::NavigatorUserMedia::webkitGetUserMedia): Ditto.

  • Modules/mediastream/UserMediaRequest.cpp:

(WebCore::parseOptions): Simplified error handling by removing exception code parameter.
(WebCore::UserMediaRequest::start): Renamed create in start and added common code.

  • Modules/mediastream/UserMediaRequest.h:
Location:
trunk/Source/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r185897 r185903  
     12015-06-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>
     2
     3        Refactor UserMediaRequest to share more codes between MediaDevices.getUserMedia and legacy webkitGetUserMedia
     4        https://bugs.webkit.org/show_bug.cgi?id=146237
     5
     6        Reviewed by Darin Adler.
     7
     8        Covered by existing tests, no change in behavior.
     9
     10        * Modules/mediastream/MediaConstraintsImpl.cpp:
     11        (WebCore::MediaConstraintsImpl::create): Simplified error handling by removing exception code parameter.
     12        * Modules/mediastream/MediaConstraintsImpl.h: Ditto.
     13        * Modules/mediastream/MediaDevices.cpp:
     14        (WebCore::MediaDevices::getUserMedia): Removed code now in UserMediaRequest::start.
     15        * Modules/mediastream/NavigatorUserMedia.cpp:
     16        (WebCore::NavigatorUserMedia::webkitGetUserMedia): Ditto.
     17        * Modules/mediastream/UserMediaRequest.cpp:
     18        (WebCore::parseOptions): Simplified error handling by removing exception code parameter.
     19        (WebCore::UserMediaRequest::start): Renamed create in start and added common code.
     20        * Modules/mediastream/UserMediaRequest.h:
     21
    1222015-06-23  Andreas Kling  <akling@apple.com>
    223
  • trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.cpp

    r185101 r185903  
    4242namespace WebCore {
    4343
    44 RefPtr<MediaConstraintsImpl> MediaConstraintsImpl::create(const Dictionary& constraints, ExceptionCode& ec)
     44RefPtr<MediaConstraintsImpl> MediaConstraintsImpl::create(const Dictionary& constraints)
    4545{
    4646    RefPtr<MediaConstraintsImpl> object = adoptRef(*new MediaConstraintsImpl());
    47     if (!object->initialize(constraints)) {
    48         ec = TYPE_MISMATCH_ERR;
     47    if (!object->initialize(constraints))
    4948        return nullptr;
    50     }
    5149    return object;
    5250}
  • trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h

    r185091 r185903  
    4545public:
    4646    static Ref<MediaConstraintsImpl> create();
    47     static RefPtr<MediaConstraintsImpl> create(const Dictionary&, ExceptionCode&);
     47    static RefPtr<MediaConstraintsImpl> create(const Dictionary&);
    4848
    4949    virtual ~MediaConstraintsImpl();
  • trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp

    r185873 r185903  
    6363void MediaDevices::getUserMedia(const Dictionary& options, Promise&& promise, ExceptionCode& ec) const
    6464{
    65     if (!options.isObject()) {
    66         ec = TypeError;
    67         return;
    68     }
    69 
    70     UserMediaController* userMedia = UserMediaController::from(document() ? document()->page() : nullptr);
    71     if (!userMedia) {
    72         // FIXME: We probably want to return a MediaStreamError here using the rejectCallback, and get rid off the ExceptionCode parameter.
    73         ec = NOT_SUPPORTED_ERR;
    74         return;
    75     }
    76 
    77     RefPtr<UserMediaRequest> request = UserMediaRequest::create(document(), userMedia, options, WTF::move(promise), ec);
    78     if (!request) {
    79         ec = NOT_SUPPORTED_ERR;
    80         return;
    81     }
    82 
    83     request->start();
     65    UserMediaRequest::start(document(), options, WTF::move(promise), ec);
    8466}
    8567
  • trunk/Source/WebCore/Modules/mediastream/NavigatorUserMedia.cpp

    r185873 r185903  
    5757    }
    5858
    59     UserMediaController* userMedia = UserMediaController::from(navigator->frame() ? navigator->frame()->page() : 0);
    60     if (!userMedia) {
    61         ec = NOT_SUPPORTED_ERR;
    62         return;
    63     }
    64 
    6559    // We do not need to protect the context (i.e. document) here as UserMediaRequest is observing context destruction and will check validity before resolving/rejecting promise.
    6660    Document* document = navigator->frame()->document();
     
    8175    };
    8276
    83     auto request = UserMediaRequest::create(navigator->frame()->document(), userMedia, options, MediaDevices::Promise(WTF::move(resolveCallback), WTF::move(rejectCallback)), ec);
    84     if (!request) {
    85         ec = NOT_SUPPORTED_ERR;
    86         return;
    87     }
    88 
    89     request->start();
     77    UserMediaRequest::start(navigator->frame()->document(), options, MediaDevices::Promise(WTF::move(resolveCallback), WTF::move(rejectCallback)), ec);
    9078}
    9179
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp

    r185873 r185903  
    5656namespace WebCore {
    5757
    58 static PassRefPtr<MediaConstraints> parseOptions(const Dictionary& options, const String& mediaType, ExceptionCode& ec)
    59 {
    60     RefPtr<MediaConstraints> constraints;
    61 
     58static RefPtr<MediaConstraints> parseOptions(const Dictionary& options, const String& mediaType)
     59{
    6260    Dictionary constraintsDictionary;
    63     bool ok = options.get(mediaType, constraintsDictionary);
    64     if (ok && !constraintsDictionary.isUndefinedOrNull())
    65         constraints = MediaConstraintsImpl::create(constraintsDictionary, ec);
    66     else {
    67         bool mediaRequested = false;
    68         options.get(mediaType, mediaRequested);
    69         if (mediaRequested)
    70             constraints = MediaConstraintsImpl::create();
    71     }
    72 
    73     return constraints.release();
    74 }
    75 
    76 RefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, MediaDevices::Promise&& promise, ExceptionCode& ec)
    77 {
    78     RefPtr<MediaConstraints> audioConstraints = parseOptions(options, AtomicString("audio", AtomicString::ConstructFromLiteral), ec);
    79     if (ec)
     61    if (options.get(mediaType, constraintsDictionary) && !constraintsDictionary.isUndefinedOrNull())
     62        return MediaConstraintsImpl::create(constraintsDictionary);
     63
     64    bool mediaRequested = false;
     65    if (!options.get(mediaType, mediaRequested) || !mediaRequested)
    8066        return nullptr;
    8167
    82     RefPtr<MediaConstraints> videoConstraints = parseOptions(options, AtomicString("video", AtomicString::ConstructFromLiteral), ec);
    83     if (ec)
    84         return nullptr;
    85 
    86     if (!audioConstraints && !videoConstraints)
    87         return nullptr;
    88 
    89     return adoptRef(*new UserMediaRequest(context, controller, audioConstraints.release(), videoConstraints.release(), WTF::move(promise)));
     68    return MediaConstraintsImpl::create();
     69}
     70
     71void UserMediaRequest::start(Document* document, const Dictionary& options, MediaDevices::Promise&& promise, ExceptionCode& ec)
     72{
     73    if (!options.isObject()) {
     74        ec = TypeError;
     75        return;
     76    }
     77
     78    UserMediaController* userMedia = UserMediaController::from(document ? document->page() : nullptr);
     79    if (!userMedia) {
     80        ec = NOT_SUPPORTED_ERR;
     81        return;
     82    }
     83
     84    RefPtr<MediaConstraints> audioConstraints = parseOptions(options, AtomicString("audio", AtomicString::ConstructFromLiteral));
     85    RefPtr<MediaConstraints> videoConstraints = parseOptions(options, AtomicString("video", AtomicString::ConstructFromLiteral));
     86
     87    if (!audioConstraints && !videoConstraints) {
     88        ec = NOT_SUPPORTED_ERR;
     89        return;
     90    }
     91
     92    Ref<UserMediaRequest> request = adoptRef(*new UserMediaRequest(document, userMedia, audioConstraints.release(), videoConstraints.release(), WTF::move(promise)));
     93    request->start();
    9094}
    9195
  • trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h

    r185873 r185903  
    5959class UserMediaRequest : public MediaStreamCreationClient, public ContextDestructionObserver {
    6060public:
    61     static RefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const Dictionary& options, MediaDevices::Promise&&, ExceptionCode&);
     61    static void start(Document*, const Dictionary&, MediaDevices::Promise&&, ExceptionCode&);
    6262    ~UserMediaRequest();
    6363
Note: See TracChangeset for help on using the changeset viewer.