Changeset 252003 in webkit


Ignore:
Timestamp:
Nov 4, 2019 10:56:35 AM (4 years ago)
Author:
Chris Dumez
Message:

MediaRecorder should not prevent entering the back/forward cache
https://bugs.webkit.org/show_bug.cgi?id=203093
<rdar://problem/56748870>

Reviewed by Eric Carlson.

Source/WebCore:

Let pages using MediaRecorder enter the back/forward cache. On suspension, we
stop recording and we queue an error event which will get dispatched upon
resuming.

Test: fast/history/page-cache-media-recorder.html

  • Modules/mediarecorder/MediaRecorder.cpp:

(WebCore::MediaRecorder::document const):
(WebCore::MediaRecorder::suspend):
(WebCore::MediaRecorder::activeDOMObjectName const):
(WebCore::MediaRecorder::scheduleDeferredTask):
(WebCore::MediaRecorder::shouldPreventEnteringBackForwardCache_DEPRECATED const): Deleted.

  • Modules/mediarecorder/MediaRecorder.h:

LayoutTests:

Add layout test coverage.

  • fast/history/page-cache-media-recorder-expected.txt: Added.
  • fast/history/page-cache-media-recorder.html: Added.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r251998 r252003  
     12019-11-04  Chris Dumez  <cdumez@apple.com>
     2
     3        MediaRecorder should not prevent entering the back/forward cache
     4        https://bugs.webkit.org/show_bug.cgi?id=203093
     5        <rdar://problem/56748870>
     6
     7        Reviewed by Eric Carlson.
     8
     9        Add layout test coverage.
     10
     11        * fast/history/page-cache-media-recorder-expected.txt: Added.
     12        * fast/history/page-cache-media-recorder.html: Added.
     13
    1142019-11-04  Yury Semikhatsky  <yurys@chromium.org>
    215
  • trunk/LayoutTests/platform/win/TestExpectations

    r251786 r252003  
    42374237imported/w3c/web-platform-tests/mediacapture-record [ Skip ]
    42384238fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html [ Skip ]
     4239fast/history/page-cache-media-recorder.html [ Skip ]
    42394240http/wpt/mediarecorder [ Skip ]
    42404241
  • trunk/Source/WebCore/ChangeLog

    r252000 r252003  
     12019-11-04  Chris Dumez  <cdumez@apple.com>
     2
     3        MediaRecorder should not prevent entering the back/forward cache
     4        https://bugs.webkit.org/show_bug.cgi?id=203093
     5        <rdar://problem/56748870>
     6
     7        Reviewed by Eric Carlson.
     8
     9        Let pages using MediaRecorder enter the back/forward cache. On suspension, we
     10        stop recording and we queue an error event which will get dispatched upon
     11        resuming.
     12
     13        Test: fast/history/page-cache-media-recorder.html
     14
     15        * Modules/mediarecorder/MediaRecorder.cpp:
     16        (WebCore::MediaRecorder::document const):
     17        (WebCore::MediaRecorder::suspend):
     18        (WebCore::MediaRecorder::activeDOMObjectName const):
     19        (WebCore::MediaRecorder::scheduleDeferredTask):
     20        (WebCore::MediaRecorder::shouldPreventEnteringBackForwardCache_DEPRECATED const): Deleted.
     21        * Modules/mediarecorder/MediaRecorder.h:
     22
    1232019-11-04  Alex Christensen  <achristensen@webkit.org>
    224
  • trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp

    r251244 r252003  
    3636#include "MediaRecorderPrivate.h"
    3737#include "SharedBuffer.h"
     38#include "WindowEventLoop.h"
    3839#include <wtf/IsoMallocInlines.h>
    3940
     
    9495}
    9596
     97Document* MediaRecorder::document() const
     98{
     99    return downcast<Document>(scriptExecutionContext());
     100}
     101
    96102void MediaRecorder::stop()
    97103{
     
    100106}
    101107
     108void MediaRecorder::suspend(ReasonForSuspension reason)
     109{
     110    if (reason != ReasonForSuspension::BackForwardCache)
     111        return;
     112
     113    if (!m_isActive || state() == RecordingState::Inactive)
     114        return;
     115
     116    stopRecordingInternal();
     117
     118    scheduleDeferredTask([this] {
     119        dispatchEvent(MediaRecorderErrorEvent::create(eventNames().errorEvent, Exception { UnknownError, "MediaStream recording was interrupted"_s }));
     120    });
     121}
     122
    102123const char* MediaRecorder::activeDOMObjectName() const
    103124{
    104125    return "MediaRecorder";
    105 }
    106 
    107 bool MediaRecorder::shouldPreventEnteringBackForwardCache_DEPRECATED() const
    108 {
    109     return true; // FIXME: We should do better here as this prevents entering BackForwardCache.
    110126}
    111127
     
    197213{
    198214    ASSERT(function);
    199     auto* scriptExecutionContext = this->scriptExecutionContext();
    200     if (!scriptExecutionContext)
    201         return;
    202 
    203     scriptExecutionContext->postTask([protectedThis = makeRef(*this), function = WTFMove(function)] (auto&) {
     215    auto* document = this->document();
     216    if (!document)
     217        return;
     218
     219    document->eventLoop().queueTask(TaskSource::Networking, *document, [pendingActivity = makePendingActivity(*this), function = WTFMove(function)] {
    204220        function();
    205221    });
  • trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.h

    r251244 r252003  
    8080    Ref<Blob> createRecordingDataBlob();
    8181
     82    Document* document() const;
     83
    8284    // EventTarget
    8385    void refEventTarget() final { ref(); }
     
    8789
    8890    // ActiveDOMObject API.
     91    void suspend(ReasonForSuspension) final;
    8992    void stop() final;
    9093    const char* activeDOMObjectName() const final;
    91     bool shouldPreventEnteringBackForwardCache_DEPRECATED() const final;
    9294   
    9395    void stopRecordingInternal();
Note: See TracChangeset for help on using the changeset viewer.