Diff
Modified: trunk/LayoutTests/ChangeLog (208605 => 208606)
--- trunk/LayoutTests/ChangeLog 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/LayoutTests/ChangeLog 2016-11-11 21:45:21 UTC (rev 208606)
@@ -1,3 +1,14 @@
+2016-11-11 Eric Carlson <eric.carl...@apple.com>
+
+ [MediaStream] defer resolution of getUserMedia promise made in a background tab
+ https://bugs.webkit.org/show_bug.cgi?id=164643
+ <rdar://problem/29048317>
+
+ Reviewed by Brady Eidson.
+
+ * fast/mediastream/get-user-media-background-tab-expected.txt: Added.
+ * fast/mediastream/get-user-media-background-tab.html: Added.
+
2016-11-10 Jiewen Tan <jiewen_...@apple.com>
Rename CryptoKeyUsage to CryptoKeyUsageBitmap and CryptoKey::Usage to CryptoKeyUsage
Added: trunk/LayoutTests/fast/mediastream/get-user-media-background-tab-expected.txt (0 => 208606)
--- trunk/LayoutTests/fast/mediastream/get-user-media-background-tab-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-user-media-background-tab-expected.txt 2016-11-11 21:45:21 UTC (rev 208606)
@@ -0,0 +1,34 @@
+Tests getUserMedia called from a background thread.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+tabState = 'background'
+PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception.
+PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception.
+PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception.
+PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail) did not throw exception.
+
+** timer fired **
+PASS tabState is 'background'
+tabState = 'foreground'
+
+** getUserMedia() promise resolved **
+PASS tabState is 'foreground'
+PASS stream.getAudioTracks().length is 1
+
+** getUserMedia() promise resolved **
+PASS tabState is 'foreground'
+PASS stream.getAudioTracks().length is 1
+
+** getUserMedia() promise resolved **
+PASS tabState is 'foreground'
+PASS stream.getAudioTracks().length is 1
+
+** getUserMedia() promise resolved **
+PASS tabState is 'foreground'
+PASS stream.getAudioTracks().length is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/mediastream/get-user-media-background-tab.html (0 => 208606)
--- trunk/LayoutTests/fast/mediastream/get-user-media-background-tab.html (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-user-media-background-tab.html 2016-11-11 21:45:21 UTC (rev 208606)
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src=""
+ <script>
+ let tabState;
+ let streamCount = 4;
+ let streams = 0;
+
+ function gotStream(s)
+ {
+ debug('<br>** getUserMedia() promise resolved **')
+ shouldBe('tabState', "'foreground'");
+ stream = s;
+ shouldBe('stream.getAudioTracks().length', '1');
+ if (++streams == streamCount)
+ finishJSTest();
+ }
+
+ function fail(error)
+ {
+ testFailed(`getUserMedia() failed, error = ${error}`);
+ finishJSTest();
+ }
+
+ function checkState()
+ {
+ debug('<br>** timer fired **')
+ shouldBe('tabState', "'background'");
+ evalAndLog(`tabState = 'foreground'`);
+ if (internals)
+ internals.settings.setCanStartMedia(true);
+ }
+
+ function start()
+ {
+ description("Tests getUserMedia called from a background thread.");
+ evalAndLog(`tabState = 'background'`);
+ if (window.testRunner) {
+ internals.settings.setCanStartMedia(false);
+ testRunner.setUserMediaPermission(true);
+ }
+ for (var i = 0; i < streamCount; i++)
+ shouldNotThrow('navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream).catch(fail)');
+ setTimeout(checkState, 200);
+ }
+
+ window.jsTestIsAsync = true;
+ window.successfullyParsed = true;
+
+ </script>
+ <script src=""
+ </head>
+ <body _onload_="start()">
+ </body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (208605 => 208606)
--- trunk/Source/WebCore/ChangeLog 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/ChangeLog 2016-11-11 21:45:21 UTC (rev 208606)
@@ -1,3 +1,38 @@
+2016-11-11 Eric Carlson <eric.carl...@apple.com>
+
+ [MediaStream] defer resolution of getUserMedia promise made in a background tab
+ https://bugs.webkit.org/show_bug.cgi?id=164643
+ <rdar://problem/29048317>
+
+ Reviewed by Brady Eidson.
+
+ Test: fast/mediastream/get-user-media-background-tab.html
+
+ Do not start producing data when the document does not allow media
+ to start playing. Instead, register with the document for a callback
+ when playback is allowed and start then.
+ * Modules/mediastream/MediaStream.cpp:
+ (WebCore::MediaStream::~MediaStream):
+ (WebCore::MediaStream::mediaCanStart):
+ (WebCore::MediaStream::startProducingData):
+ (WebCore::MediaStream::stopProducingData):
+ (WebCore::MediaStream::pageMutedStateDidChange):
+ * Modules/mediastream/MediaStream.h:
+
+ * Modules/webaudio/AudioContext.cpp:
+ (WebCore::AudioContext::mediaCanStart): Deal with API change.
+ * Modules/webaudio/AudioContext.h:
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::mediaCanStart): Ditto.
+ * html/HTMLMediaElement.h:
+ * page/MediaCanStartListener.h:
+
+ * page/Page.cpp:
+ (WebCore::Page::takeAnyMediaCanStartListener): Return the listener and document.
+ (WebCore::Page::setCanStartMedia): Pass the document to the listener.
+ * page/Page.h:
+
2016-11-11 Zalan Bujtas <za...@apple.com>
RenderFlowThread's containing block cache should be invalidated before calling styleDidChange.
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp (208605 => 208606)
--- trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp 2016-11-11 21:45:21 UTC (rev 208606)
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
* Copyright (C) 2011, 2012, 2015 Ericsson AB. All rights reserved.
- * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
* Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
*
* Redistribution and use in source and binary forms, with or without
@@ -34,6 +34,7 @@
#include "Event.h"
#include "EventNames.h"
#include "ExceptionCode.h"
+#include "Logging.h"
#include "MediaStreamRegistry.h"
#include "MediaStreamTrackEvent.h"
#include "Page.h"
@@ -111,8 +112,11 @@
m_private->removeObserver(*this);
for (auto& track : m_trackSet.values())
track->removeObserver(this);
- if (Document* document = this->document())
+ if (Document* document = this->document()) {
document->removeAudioProducer(this);
+ if (m_isWaitingUntilMediaCanStart)
+ document->removeMediaCanStartListener(this);
+ }
}
RefPtr<MediaStream> MediaStream::clone()
@@ -247,6 +251,41 @@
statusDidChange();
}
+void MediaStream::mediaCanStart(Document& document)
+{
+ ASSERT_UNUSED(document, &document == this->document());
+ ASSERT(m_isWaitingUntilMediaCanStart);
+ if (m_isWaitingUntilMediaCanStart) {
+ m_isWaitingUntilMediaCanStart = false;
+ startProducingData();
+ }
+}
+
+void MediaStream::startProducingData()
+{
+ Document* document = this->document();
+ if (!document || !document->page())
+ return;
+
+ // If we can't start a load right away, start it later.
+ if (!document->page()->canStartMedia()) {
+ LOG(Media, "MediaStream::startProducingData(%p) - not allowed to start in background, waiting", this);
+ if (m_isWaitingUntilMediaCanStart)
+ return;
+
+ m_isWaitingUntilMediaCanStart = true;
+ document->addMediaCanStartListener(this);
+ return;
+ }
+
+ m_private->startProducingData();
+}
+
+void MediaStream::stopProducingData()
+{
+ m_private->stopProducingData();
+}
+
void MediaStream::pageMutedStateDidChange()
{
if (!m_isActive)
@@ -262,9 +301,9 @@
m_externallyMuted = pageMuted;
if (pageMuted)
- m_private->stopProducingData();
+ stopProducingData();
else
- m_private->startProducingData();
+ startProducingData();
}
MediaProducer::MediaStateFlags MediaStream::mediaState() const
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.h (208605 => 208606)
--- trunk/Source/WebCore/Modules/mediastream/MediaStream.h 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.h 2016-11-11 21:45:21 UTC (rev 208606)
@@ -33,6 +33,7 @@
#include "ContextDestructionObserver.h"
#include "EventTarget.h"
#include "ExceptionBase.h"
+#include "MediaCanStartListener.h"
#include "MediaProducer.h"
#include "MediaStreamPrivate.h"
#include "MediaStreamTrack.h"
@@ -47,7 +48,15 @@
class Document;
-class MediaStream final : public URLRegistrable, public EventTargetWithInlineData, public ContextDestructionObserver, public MediaStreamTrack::Observer, public MediaStreamPrivate::Observer, private MediaProducer, public RefCounted<MediaStream> {
+class MediaStream final
+ : public URLRegistrable
+ , public EventTargetWithInlineData
+ , public ContextDestructionObserver
+ , public MediaStreamTrack::Observer
+ , public MediaStreamPrivate::Observer
+ , private MediaProducer
+ , private MediaCanStartListener
+ , public RefCounted<MediaStream> {
public:
class Observer {
public:
@@ -78,6 +87,9 @@
MediaStreamPrivate* privateStream() const { return m_private.get(); }
+ void startProducingData();
+ void stopProducingData();
+
// EventTarget
EventTargetInterface eventTargetInterface() const final { return MediaStreamEventTargetInterfaceType; }
ScriptExecutionContext* scriptExecutionContext() const final { return ContextDestructionObserver::scriptExecutionContext(); }
@@ -118,6 +130,9 @@
void pageMutedStateDidChange() final;
MediaProducer::MediaStateFlags mediaState() const final;
+ // MediaCanStartListener
+ void mediaCanStart(Document&) final;
+
bool internalAddTrack(Ref<MediaStreamTrack>&&, StreamModifier);
bool internalRemoveTrack(const String&, StreamModifier);
@@ -142,6 +157,7 @@
bool m_isActive { false };
bool m_isMuted { true };
bool m_externallyMuted { false };
+ bool m_isWaitingUntilMediaCanStart { false };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp (208605 => 208606)
--- trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp 2016-11-11 21:45:21 UTC (rev 208606)
@@ -957,8 +957,9 @@
setState(State::Running);
}
-void AudioContext::mediaCanStart()
+void AudioContext::mediaCanStart(Document& document)
{
+ ASSERT_UNUSED(document, &document == this->document());
removeBehaviorRestriction(AudioContext::RequirePageConsentForAudioStartRestriction);
mayResumePlayback(true);
}
Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.h (208605 => 208606)
--- trunk/Source/WebCore/Modules/webaudio/AudioContext.h 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.h 2016-11-11 21:45:21 UTC (rev 208606)
@@ -284,7 +284,7 @@
void scheduleNodeDeletion();
- void mediaCanStart() override;
+ void mediaCanStart(Document&) override;
// MediaProducer
MediaProducer::MediaStateFlags mediaState() const override;
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (208605 => 208606)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-11-11 21:45:21 UTC (rev 208606)
@@ -5664,8 +5664,9 @@
}
#endif
-void HTMLMediaElement::mediaCanStart()
+void HTMLMediaElement::mediaCanStart(Document& document)
{
+ ASSERT_UNUSED(document, &document == &this->document());
LOG(Media, "HTMLMediaElement::mediaCanStart(%p) - m_isWaitingUntilMediaCanStart = %s, m_pausedInternal = %s",
this, boolString(m_isWaitingUntilMediaCanStart), boolString(m_pausedInternal) );
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (208605 => 208606)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2016-11-11 21:45:21 UTC (rev 208606)
@@ -727,7 +727,7 @@
void setPlaybackRateInternal(double);
- void mediaCanStart() override;
+ void mediaCanStart(Document&) final;
void invalidateCachedTime() const;
void refreshCachedTime() const;
Modified: trunk/Source/WebCore/page/MediaCanStartListener.h (208605 => 208606)
--- trunk/Source/WebCore/page/MediaCanStartListener.h 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/page/MediaCanStartListener.h 2016-11-11 21:45:21 UTC (rev 208606)
@@ -27,9 +27,11 @@
namespace WebCore {
+class Document;
+
class MediaCanStartListener {
public:
- virtual void mediaCanStart() = 0;
+ virtual void mediaCanStart(Document&) = 0;
protected:
virtual ~MediaCanStartListener() { }
};
Modified: trunk/Source/WebCore/page/Page.cpp (208605 => 208606)
--- trunk/Source/WebCore/page/Page.cpp 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/page/Page.cpp 2016-11-11 21:45:21 UTC (rev 208606)
@@ -555,15 +555,15 @@
return false;
}
-inline MediaCanStartListener* Page::takeAnyMediaCanStartListener()
+inline Optional<std::pair<MediaCanStartListener&, Document&>> Page::takeAnyMediaCanStartListener()
{
for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
if (!frame->document())
continue;
if (MediaCanStartListener* listener = frame->document()->takeAnyMediaCanStartListener())
- return listener;
+ return { { *listener, *frame->document() } };
}
- return 0;
+ return Nullopt;
}
void Page::setCanStartMedia(bool canStartMedia)
@@ -574,10 +574,10 @@
m_canStartMedia = canStartMedia;
while (m_canStartMedia) {
- MediaCanStartListener* listener = takeAnyMediaCanStartListener();
+ auto listener = takeAnyMediaCanStartListener();
if (!listener)
break;
- listener->mediaCanStart();
+ listener->first.mediaCanStart(listener->second);
}
}
Modified: trunk/Source/WebCore/page/Page.h (208605 => 208606)
--- trunk/Source/WebCore/page/Page.h 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebCore/page/Page.h 2016-11-11 21:45:21 UTC (rev 208606)
@@ -549,7 +549,7 @@
unsigned findMatchesForText(const String&, FindOptions, unsigned maxMatchCount, ShouldHighlightMatches, ShouldMarkMatches);
- MediaCanStartListener* takeAnyMediaCanStartListener();
+ Optional<std::pair<MediaCanStartListener&, Document&>> takeAnyMediaCanStartListener();
Vector<Ref<PluginViewBase>> pluginViews();
Modified: trunk/Source/WebKit2/ChangeLog (208605 => 208606)
--- trunk/Source/WebKit2/ChangeLog 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebKit2/ChangeLog 2016-11-11 21:45:21 UTC (rev 208606)
@@ -1,3 +1,24 @@
+2016-11-11 Eric Carlson <eric.carl...@apple.com>
+
+ [MediaStream] defer resolution of getUserMedia promise made in a background tab
+ https://bugs.webkit.org/show_bug.cgi?id=164643
+ <rdar://problem/29048317>
+
+ Reviewed by Brady Eidson.
+
+ Do not ask for user for access to capture devices when the document does not
+ allow media to play, wait until playback is allowed.
+
+ * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
+ (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest):
+ (WebKit::UserMediaPermissionRequestManager::sendUserMediaRequest):
+ (WebKit::UserMediaPermissionRequestManager::mediaCanStart):
+ (WebKit::UserMediaPermissionRequestManager::grantUserMediaDevicesSandboxExtension):
+ * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::mediaCanStart):
+ * WebProcess/Plugins/PluginView.h:
+
2016-11-11 Darin Adler <da...@apple.com>
Move Node from ExceptionCode to ExceptionOr
Modified: trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp (208605 => 208606)
--- trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp 2016-11-11 21:45:21 UTC (rev 208606)
@@ -60,6 +60,27 @@
Document* document = request.document();
Frame* frame = document ? document->frame() : nullptr;
+ if (!frame || !document->page()) {
+ request.deny(UserMediaRequest::OtherFailure, emptyString());
+ return;
+ }
+
+ if (document->page()->canStartMedia()) {
+ sendUserMediaRequest(request);
+ return;
+ }
+
+ auto& pendingRequests = m_blockedRequests.add(document, Vector<RefPtr<UserMediaRequest>>()).iterator->value;
+ if (pendingRequests.isEmpty())
+ document->addMediaCanStartListener(this);
+ pendingRequests.append(&request);
+}
+
+void UserMediaPermissionRequestManager::sendUserMediaRequest(UserMediaRequest& request)
+{
+ Document* document = request.document();
+ Frame* frame = document ? document->frame() : nullptr;
+
if (!frame) {
request.deny(UserMediaRequest::OtherFailure, emptyString());
return;
@@ -83,14 +104,46 @@
if (!requestID)
return;
m_idToUserMediaRequestMap.remove(requestID);
+ removeMediaRequestFromMaps(request);
}
+void UserMediaPermissionRequestManager::mediaCanStart(Document& document)
+{
+ auto pendingRequests = m_blockedRequests.take(&document);
+ while (!pendingRequests.isEmpty()) {
+ if (!document.page()->canStartMedia()) {
+ m_blockedRequests.add(&document, pendingRequests);
+ document.addMediaCanStartListener(this);
+ break;
+ }
+
+ sendUserMediaRequest(*pendingRequests.takeLast());
+ }
+}
+
+void UserMediaPermissionRequestManager::removeMediaRequestFromMaps(UserMediaRequest& request)
+{
+ auto pendingRequests = m_blockedRequests.take(request.document());
+ for (auto& pendingRequest : pendingRequests) {
+ if (&request != pendingRequest.get())
+ continue;
+
+ if (pendingRequests.isEmpty())
+ request.document()->removeMediaCanStartListener(this);
+ else
+ m_blockedRequests.add(request.document(), pendingRequests);
+ break;
+ }
+
+ m_userMediaRequestToIDMap.remove(&request);
+}
+
void UserMediaPermissionRequestManager::userMediaAccessWasGranted(uint64_t requestID, const String& audioDeviceUID, const String& videoDeviceUID)
{
auto request = m_idToUserMediaRequestMap.take(requestID);
if (!request)
return;
- m_userMediaRequestToIDMap.remove(request);
+ removeMediaRequestFromMaps(*request);
request->allow(audioDeviceUID, videoDeviceUID);
}
@@ -100,7 +153,7 @@
auto request = m_idToUserMediaRequestMap.take(requestID);
if (!request)
return;
- m_userMediaRequestToIDMap.remove(request);
+ removeMediaRequestFromMaps(*request);
request->deny(reason, invalidConstraint);
}
@@ -150,7 +203,7 @@
ASSERT(m_userMediaDeviceSandboxExtensions.size() <= 2);
for (size_t i = 0; i < sandboxExtensionHandles.size(); i++) {
- if (RefPtr<SandboxExtension> extension = SandboxExtension::create(sandboxExtensionHandles[i])) {
+ if (auto extension = SandboxExtension::create(sandboxExtensionHandles[i])) {
extension->consume();
m_userMediaDeviceSandboxExtensions.append(extension.release());
}
Modified: trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.h (208605 => 208606)
--- trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.h 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.h 2016-11-11 21:45:21 UTC (rev 208606)
@@ -23,6 +23,7 @@
#if ENABLE(MEDIA_STREAM)
#include "SandboxExtension.h"
+#include <WebCore/MediaCanStartListener.h>
#include <WebCore/MediaConstraints.h>
#include <WebCore/MediaDevicesEnumerationRequest.h>
#include <WebCore/UserMediaClient.h>
@@ -35,7 +36,8 @@
class WebPage;
-class UserMediaPermissionRequestManager {
+class UserMediaPermissionRequestManager
+ : private WebCore::MediaCanStartListener {
public:
explicit UserMediaPermissionRequestManager(WebPage&);
~UserMediaPermissionRequestManager();
@@ -52,6 +54,13 @@
void grantUserMediaDevicesSandboxExtension(const SandboxExtension::HandleArray&);
private:
+ void sendUserMediaRequest(WebCore::UserMediaRequest&);
+
+ // WebCore::MediaCanStartListener
+ void mediaCanStart(WebCore::Document&) override;
+
+ void removeMediaRequestFromMaps(WebCore::UserMediaRequest&);
+
WebPage& m_page;
HashMap<uint64_t, RefPtr<WebCore::UserMediaRequest>> m_idToUserMediaRequestMap;
@@ -61,6 +70,8 @@
HashMap<RefPtr<WebCore::MediaDevicesEnumerationRequest>, uint64_t> m_mediaDevicesEnumerationRequestToIDMap;
Vector<RefPtr<SandboxExtension>> m_userMediaDeviceSandboxExtensions;
+
+ HashMap<RefPtr<WebCore::Document>, Vector<RefPtr<WebCore::UserMediaRequest>>> m_blockedRequests;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (208605 => 208606)
--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp 2016-11-11 21:45:21 UTC (rev 208606)
@@ -1371,7 +1371,7 @@
m_plugin->setFocus(hasFocus);
}
-void PluginView::mediaCanStart()
+void PluginView::mediaCanStart(WebCore::Document&)
{
ASSERT(m_isWaitingUntilMediaCanStart);
m_isWaitingUntilMediaCanStart = false;
Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h (208605 => 208606)
--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h 2016-11-11 21:20:01 UTC (rev 208605)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h 2016-11-11 21:45:21 UTC (rev 208606)
@@ -184,7 +184,7 @@
void clipRectChanged() override;
// WebCore::MediaCanStartListener
- void mediaCanStart() override;
+ void mediaCanStart(WebCore::Document&) override;
// WebCore::MediaProducer
MediaProducer::MediaStateFlags mediaState() const override { return m_pluginIsPlayingAudio ? MediaProducer::IsPlayingAudio : MediaProducer::IsNotPlaying; }