Changeset 74202 in webkit


Ignore:
Timestamp:
Dec 16, 2010 11:37:44 AM (13 years ago)
Author:
andersca@apple.com
Message:

Save the manual plug-in stream data and redeliver it when the plug-in is initialized
https://bugs.webkit.org/show_bug.cgi?id=51201

Reviewed by Darin Adler.

WebCore:

Export SharedBuffer related symbols.

  • WebCore.exp.in:

WebKit2:

  • WebProcess/Plugins/PluginView.cpp:

(WebKit::PluginView::PluginView):
Initialize m_manualStreamState.

(WebKit::PluginView::manualLoadDidReceiveResponse):
If the plug-in hasn't been initialized, store the response.

(WebKit::PluginView::manualLoadDidReceiveData):
If the plug-in hasn't been initialized, store the data.

(WebKit::PluginView::manualLoadDidFinishLoading):
If the plug-in hasn't been initialized, update the state.

(WebKit::PluginView::manualLoadDidFail):
If the plug-in hasn't been initialized, store the error and update the state.

(WebKit::PluginView::initializePlugin):
Call redeliverManualStream.

(WebKit::PluginView::redeliverManualStream):
Redeliver the manual stream to the plug-in.

  • WebProcess/Plugins/PluginView.h:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r74199 r74202  
     12010-12-16  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        Save the manual plug-in stream data and redeliver it when the plug-in is initialized
     6        https://bugs.webkit.org/show_bug.cgi?id=51201
     7
     8        Export SharedBuffer related symbols.
     9
     10        * WebCore.exp.in:
     11
    1122010-12-16  Pavel Feldman  <pfeldman@chromium.org>
    213
  • trunk/WebCore/WebCore.exp.in

    r74139 r74202  
    272272__ZN7WebCore12SharedBuffer12createNSDataEv
    273273__ZN7WebCore12SharedBuffer24createWithContentsOfFileERKN3WTF6StringE
     274__ZN7WebCore12SharedBuffer6appendEPKcj
    274275__ZN7WebCore12SharedBufferC1EPKci
     276__ZN7WebCore12SharedBufferC1Ev
    275277__ZN7WebCore12SharedBufferD1Ev
    276278__ZN7WebCore12SpellChecker8didCheckEiRKN3WTF6VectorINS_19SpellCheckingResultELm0EEE
     
    981983__ZNK7WebCore12RenderObject7childAtEj
    982984__ZNK7WebCore12RenderWidget14windowClipRectEv
     985__ZNK7WebCore12SharedBuffer11getSomeDataERPKcj
    983986__ZNK7WebCore12SharedBuffer4dataEv
    984987__ZNK7WebCore12SharedBuffer4sizeEv
  • trunk/WebKit2/ChangeLog

    r74201 r74202  
     12010-12-16  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        Save the manual plug-in stream data and redeliver it when the plug-in is initialized
     6        https://bugs.webkit.org/show_bug.cgi?id=51201
     7
     8        * WebProcess/Plugins/PluginView.cpp:
     9        (WebKit::PluginView::PluginView):
     10        Initialize m_manualStreamState.
     11
     12        (WebKit::PluginView::manualLoadDidReceiveResponse):
     13        If the plug-in hasn't been initialized, store the response.
     14
     15        (WebKit::PluginView::manualLoadDidReceiveData):
     16        If the plug-in hasn't been initialized, store the data.
     17       
     18        (WebKit::PluginView::manualLoadDidFinishLoading):
     19        If the plug-in hasn't been initialized, update the state.
     20
     21        (WebKit::PluginView::manualLoadDidFail):
     22        If the plug-in hasn't been initialized, store the error and update the state.
     23       
     24        (WebKit::PluginView::initializePlugin):
     25        Call redeliverManualStream.
     26
     27        (WebKit::PluginView::redeliverManualStream):
     28        Redeliver the manual stream to the plug-in.
     29
     30        * WebProcess/Plugins/PluginView.h:
     31
    1322010-12-16  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>
    233
  • trunk/WebKit2/WebProcess/Plugins/PluginView.cpp

    r74046 r74202  
    251251    , m_pendingURLRequestsTimer(RunLoop::main(), this, &PluginView::pendingURLRequestsTimerFired)
    252252    , m_npRuntimeObjectMap(this)
     253    , m_manualStreamState(StreamStateInitial)
    253254{
    254255#if PLATFORM(MAC)
     
    297298        return;
    298299
     300    if (!m_isInitialized) {
     301        ASSERT(m_manualStreamState == StreamStateInitial);
     302        m_manualStreamState = StreamStateHasReceivedResponse;
     303        m_manualStreamResponse = response;
     304        return;
     305    }
     306
    299307    // Compute the stream related data from the resource response.
    300308    const KURL& responseURL = response.url();
     
    317325        return;
    318326
     327    if (!m_isInitialized) {
     328        ASSERT(m_manualStreamState == StreamStateHasReceivedResponse);
     329        if (!m_manualStreamData)
     330            m_manualStreamData = SharedBuffer::create();
     331
     332        m_manualStreamData->append(bytes, length);
     333        return;
     334    }
     335
    319336    m_plugin->manualStreamDidReceiveData(bytes, length);
    320337}
     
    326343        return;
    327344
     345    if (!m_isInitialized) {
     346        ASSERT(m_manualStreamState == StreamStateHasReceivedResponse);
     347        m_manualStreamState = StreamStateFinished;
     348        return;
     349    }
     350
    328351    m_plugin->manualStreamDidFinishLoading();
    329352}
     
    334357    if (!m_plugin)
    335358        return;
     359
     360    if (!m_isInitialized) {
     361        m_manualStreamState = StreamStateFinished;
     362        m_manualStreamError = error;
     363        m_manualStreamData = nullptr;
     364        return;
     365    }
    336366
    337367    m_plugin->manualStreamDidFail(error.isCancellation());
     
    412442
    413443    viewGeometryDidChange();
     444
     445    redeliverManualStream();
    414446
    415447#if PLATFORM(MAC)
     
    721753}
    722754
     755void PluginView::redeliverManualStream()
     756{
     757    if (m_manualStreamState == StreamStateInitial) {
     758        // Nothing to do.
     759        return;
     760    }
     761
     762    if (m_manualStreamState == StreamStateFailed) {
     763        manualLoadDidFail(m_manualStreamError);
     764        return;
     765    }
     766
     767    // Deliver the response.
     768    manualLoadDidReceiveResponse(m_manualStreamResponse);
     769
     770    // Deliver the data.
     771    if (m_manualStreamData) {
     772        const char* data;
     773        unsigned position = 0;
     774
     775        while (unsigned length = m_manualStreamData->getSomeData(data, position)) {
     776            manualLoadDidReceiveData(data, length);
     777            position += length;
     778        }
     779
     780        m_manualStreamData = nullptr;
     781    }
     782
     783    if (m_manualStreamState == StreamStateFinished)
     784        manualLoadDidFinishLoading();
     785}
     786
    723787void PluginView::invalidateRect(const IntRect& dirtyRect)
    724788{
  • trunk/WebKit2/WebProcess/Plugins/PluginView.h

    r74046 r74202  
    3434
    3535#include <WebCore/MediaCanStartListener.h>
     36#include <WebCore/ResourceError.h>
     37#include <WebCore/ResourceResponse.h>
    3638#include <WebCore/PluginViewBase.h>
    3739#include <wtf/Deque.h>
     
    9193    void removeStream(Stream*);
    9294    void cancelAllStreams();
     95
     96    void redeliverManualStream();
    9397
    9498    // WebCore::PluginViewBase
     
    161165    // A map of all related NPObjects for this plug-in view.
    162166    NPRuntimeObjectMap m_npRuntimeObjectMap;
     167
     168    // The manual stream state. This is used so we can deliver a manual stream to a plug-in
     169    // when it is initialized.
     170    enum ManualStreamState {
     171        StreamStateInitial,
     172        StreamStateHasReceivedResponse,
     173        StreamStateFinished,
     174        StreamStateFailed
     175    };
     176    ManualStreamState m_manualStreamState;
     177
     178    WebCore::ResourceResponse m_manualStreamResponse;
     179    WebCore::ResourceError m_manualStreamError;
     180    RefPtr<WebCore::SharedBuffer> m_manualStreamData;
    163181};
    164182
Note: See TracChangeset for help on using the changeset viewer.