Changeset 146679 in webkit


Ignore:
Timestamp:
Mar 22, 2013, 4:43:21 PM (12 years ago)
Author:
timothy_horton@apple.com
Message:

Plugin Snapshotting: Auto-start dominant plugins
https://bugs.webkit.org/show_bug.cgi?id=113111
<rdar://problem/13475726>

Reviewed by Dean Jackson.

  • html/HTMLPlugInElement.cpp:

(WebCore::HTMLPlugInElement::defaultEventHandler):
Acknowledge the new "Restarting" DisplayState.

  • html/HTMLPlugInElement.h:

Rename PlayingWithPendingMouseClick to RestartingWithPendingMouseClick for accuracy.
Add "Restarting" DisplayState, so we can be aware that the plugin is intentionally restarting and not re-snapshot it.

  • html/HTMLPlugInImageElement.cpp:

(WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Remove m_isPrimarySnapshottedPlugIn.
(WebCore::classNameForShadowRoot): Remove m_isPrimarySnapshottedPlugIn.
(WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Restart the plugin when it becomes primary.
(WebCore::HTMLPlugInImageElement::updateSnapshotInfo): Remove m_isPrimarySnapshottedPlugIn.
(WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
Move the plugin to Restarting unless it's already marked as PendingMouseClick.
(WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired): Match the PlayingWithPendingMouseClick rename.
(WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Don't snapshot if we're restarting.

  • html/HTMLPlugInImageElement.h: Remove m_isPrimarySnapshottedPlugIn.
  • rendering/RenderSnapshottedPlugIn.cpp:

(WebCore::RenderSnapshottedPlugIn::paint): Acknowledge the new "Restarting" DisplayState.
(WebCore::RenderSnapshottedPlugIn::getCursor): Acknowledge the new "Restarting" DisplayState.
(WebCore::RenderSnapshottedPlugIn::handleEvent): Match the PlayingWithPendingMouseClick rename.

  • WebProcess/Plugins/PluginView.cpp:

(WebKit::PluginView::didInitializePlugin):
(WebKit::PluginView::paint):
(WebKit::PluginView::invalidateRect):
(WebKit::PluginView::isAcceleratedCompositingEnabled):
Acknowledge the new "Restarting" DisplayState.

Location:
trunk/Source
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r146677 r146679  
     12013-03-22  Tim Horton  <timothy_horton@apple.com>
     2
     3        Plugin Snapshotting: Auto-start dominant plugins
     4        https://bugs.webkit.org/show_bug.cgi?id=113111
     5        <rdar://problem/13475726>
     6
     7        Reviewed by Dean Jackson.
     8
     9        * html/HTMLPlugInElement.cpp:
     10        (WebCore::HTMLPlugInElement::defaultEventHandler):
     11        Acknowledge the new "Restarting" DisplayState.
     12        * html/HTMLPlugInElement.h:
     13        Rename PlayingWithPendingMouseClick to RestartingWithPendingMouseClick for accuracy.
     14        Add "Restarting" DisplayState, so we can be aware that the plugin is intentionally restarting and not re-snapshot it.
     15        * html/HTMLPlugInImageElement.cpp:
     16        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Remove m_isPrimarySnapshottedPlugIn.
     17        (WebCore::classNameForShadowRoot): Remove m_isPrimarySnapshottedPlugIn.
     18        (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Restart the plugin when it becomes primary.
     19        (WebCore::HTMLPlugInImageElement::updateSnapshotInfo): Remove m_isPrimarySnapshottedPlugIn.
     20        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
     21        Move the plugin to Restarting unless it's already marked as PendingMouseClick.
     22        (WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired): Match the PlayingWithPendingMouseClick rename.
     23        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Don't snapshot if we're restarting.
     24        * html/HTMLPlugInImageElement.h: Remove m_isPrimarySnapshottedPlugIn.
     25        * rendering/RenderSnapshottedPlugIn.cpp:
     26        (WebCore::RenderSnapshottedPlugIn::paint): Acknowledge the new "Restarting" DisplayState.
     27        (WebCore::RenderSnapshottedPlugIn::getCursor): Acknowledge the new "Restarting" DisplayState.
     28        (WebCore::RenderSnapshottedPlugIn::handleEvent): Match the PlayingWithPendingMouseClick rename.
     29
    1302013-03-19  Martin Robinson  <mrobinson@igalia.com>
    231
  • trunk/Source/WebCore/html/HTMLPlugInElement.cpp

    r145934 r146679  
    204204        }
    205205
    206         if (r->isSnapshottedPlugIn() && displayState() < PlayingWithPendingMouseClick) {
     206        if (r->isSnapshottedPlugIn() && displayState() < Restarting) {
    207207            toRenderSnapshottedPlugIn(r)->handleEvent(event);
    208208            HTMLFrameOwnerElement::defaultEventHandler(event);
  • trunk/Source/WebCore/html/HTMLPlugInElement.h

    r145196 r146679  
    5252        WaitingForSnapshot,
    5353        DisplayingSnapshot,
    54         PlayingWithPendingMouseClick,
     54        Restarting,
     55        RestartingWithPendingMouseClick,
    5556        Playing
    5657    };
  • trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp

    r146248 r146679  
    7777    , m_shouldPreferPlugInsForImages(preferPlugInsForImagesOption == ShouldPreferPlugInsForImages)
    7878    , m_needsDocumentActivationCallbacks(false)
    79     , m_isPrimarySnapshottedPlugIn(false)
    8079    , m_simulatedMouseClickTimer(this, &HTMLPlugInImageElement::simulatedMouseClickTimerFired, simulatedMouseClickTimerDelay)
    8180    , m_swapRendererTimer(this, &HTMLPlugInImageElement::swapRendererTimerFired)
     
    303302}
    304303
    305 static AtomicString classNameForShadowRoot(const Node* node, bool isPrimary)
     304static AtomicString classNameForShadowRoot(const Node* node)
    306305{
    307306    DEFINE_STATIC_LOCAL(const AtomicString, plugInTinySizeClassName, ("tiny", AtomicString::ConstructFromLiteral));
     
    309308    DEFINE_STATIC_LOCAL(const AtomicString, plugInMediumSizeClassName, ("medium", AtomicString::ConstructFromLiteral));
    310309    DEFINE_STATIC_LOCAL(const AtomicString, plugInLargeSizeClassName, ("large", AtomicString::ConstructFromLiteral));
    311     DEFINE_STATIC_LOCAL(const AtomicString, plugInLargeSizePrimaryClassName, ("large primary", AtomicString::ConstructFromLiteral));
    312310
    313311    RenderBox* renderBox = static_cast<RenderBox*>(node->renderer());
     
    324322        return plugInMediumSizeClassName;
    325323
    326     return isPrimary ? plugInLargeSizePrimaryClassName : plugInLargeSizeClassName;
     324    return plugInLargeSizeClassName;
    327325}
    328326   
    329327void HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn(bool isPrimarySnapshottedPlugIn)
    330328{
    331     m_isPrimarySnapshottedPlugIn = isPrimarySnapshottedPlugIn;
    332    
    333     updateSnapshotInfo();
     329    if (isPrimarySnapshottedPlugIn)
     330        restartSnapshottedPlugIn();
    334331}
    335332
     
    341338
    342339    Element* shadowContainer = toElement(root->firstChild());
    343     shadowContainer->setAttribute(classAttr, classNameForShadowRoot(this, m_isPrimarySnapshottedPlugIn));
     340    shadowContainer->setAttribute(classAttr, classNameForShadowRoot(this));
    344341}
    345342
     
    458455void HTMLPlugInImageElement::restartSnapshottedPlugIn()
    459456{
     457    if (displayState() != RestartingWithPendingMouseClick)
     458        setDisplayState(Restarting);
     459
    460460    reattach();
    461461}
     
    469469void HTMLPlugInImageElement::simulatedMouseClickTimerFired(DeferrableOneShotTimer<HTMLPlugInImageElement>*)
    470470{
    471     ASSERT(displayState() == PlayingWithPendingMouseClick);
     471    ASSERT(displayState() == RestartingWithPendingMouseClick);
    472472    ASSERT(m_pendingClickEventFromSnapshot);
    473473
     
    548548    // We may have got to this point by restarting a snapshotted plug-in, in which case we don't want to
    549549    // reset the display state.
    550     if (displayState() != PlayingWithPendingMouseClick)
     550    if (displayState() != RestartingWithPendingMouseClick && displayState() != Restarting)
    551551        setDisplayState(WaitingForSnapshot);
    552552}
  • trunk/Source/WebCore/html/HTMLPlugInImageElement.h

    r146248 r146679  
    122122    bool m_shouldPreferPlugInsForImages;
    123123    bool m_needsDocumentActivationCallbacks;
    124     bool m_isPrimarySnapshottedPlugIn;
    125124    RefPtr<RenderStyle> m_customStyleForPageCache;
    126125    RefPtr<MouseEvent> m_pendingClickEventFromSnapshot;
  • trunk/Source/WebCore/rendering/RenderSnapshottedPlugIn.cpp

    r145934 r146679  
    8989void RenderSnapshottedPlugIn::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
    9090{
    91     if (paintInfo.phase == PaintPhaseForeground && plugInImageElement()->displayState() < HTMLPlugInElement::PlayingWithPendingMouseClick) {
     91    if (paintInfo.phase == PaintPhaseForeground && plugInImageElement()->displayState() < HTMLPlugInElement::Restarting) {
    9292        paintSnapshot(paintInfo, paintOffset);
    9393    }
     
    141141CursorDirective RenderSnapshottedPlugIn::getCursor(const LayoutPoint& point, Cursor& overrideCursor) const
    142142{
    143     if (plugInImageElement()->displayState() < HTMLPlugInElement::PlayingWithPendingMouseClick) {
     143    if (plugInImageElement()->displayState() < HTMLPlugInElement::Restarting) {
    144144        overrideCursor = handCursor();
    145145        return SetCursor;
     
    159159            return;
    160160
    161         plugInImageElement()->setDisplayState(HTMLPlugInElement::PlayingWithPendingMouseClick);
     161        plugInImageElement()->setDisplayState(HTMLPlugInElement::RestartingWithPendingMouseClick);
    162162        plugInImageElement()->userDidClickSnapshot(mouseEvent);
    163163        event->setDefaultHandled();
  • trunk/Source/WebKit2/ChangeLog

    r146673 r146679  
     12013-03-22  Tim Horton  <timothy_horton@apple.com>
     2
     3        Plugin Snapshotting: Auto-start dominant plugins
     4        https://bugs.webkit.org/show_bug.cgi?id=113111
     5        <rdar://problem/13475726>
     6
     7        Reviewed by Dean Jackson.
     8
     9        * WebProcess/Plugins/PluginView.cpp:
     10        (WebKit::PluginView::didInitializePlugin):
     11        (WebKit::PluginView::paint):
     12        (WebKit::PluginView::invalidateRect):
     13        (WebKit::PluginView::isAcceleratedCompositingEnabled):
     14        Acknowledge the new "Restarting" DisplayState.
     15
    1162013-03-21  Jer Noble  <jer.noble@apple.com>
    217
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp

    r146250 r146679  
    570570
    571571#if PLATFORM(MAC)
    572     if (m_pluginElement->displayState() < HTMLPlugInElement::PlayingWithPendingMouseClick) {
     572    if (m_pluginElement->displayState() < HTMLPlugInElement::Restarting) {
    573573        if (frame() && !frame()->settings()->maximumPlugInSnapshotAttempts()) {
    574574            m_pluginElement->setDisplayState(HTMLPlugInElement::DisplayingSnapshot);
     
    710710void PluginView::paint(GraphicsContext* context, const IntRect& /*dirtyRect*/)
    711711{
    712     if (!m_plugin || !m_isInitialized || m_pluginElement->displayState() < HTMLPlugInElement::PlayingWithPendingMouseClick)
     712    if (!m_plugin || !m_isInitialized || m_pluginElement->displayState() < HTMLPlugInElement::Restarting)
    713713        return;
    714714
     
    12161216#endif
    12171217
    1218     if (m_pluginElement->displayState() < HTMLPlugInElement::PlayingWithPendingMouseClick)
     1218    if (m_pluginElement->displayState() < HTMLPlugInElement::Restarting)
    12191219        return;
    12201220
     
    13741374        return false;
    13751375
    1376     if (m_pluginElement->displayState() < HTMLPlugInElement::PlayingWithPendingMouseClick)
     1376    if (m_pluginElement->displayState() < HTMLPlugInElement::Restarting)
    13771377        return false;
    13781378    return settings->acceleratedCompositingEnabled();
Note: See TracChangeset for help on using the changeset viewer.