Changeset 166856 in webkit


Ignore:
Timestamp:
Apr 6, 2014 2:51:34 PM (10 years ago)
Author:
Brian Burg
Message:

Web Replay: add methods to encode a frame's index based on its FrameTree position
https://bugs.webkit.org/show_bug.cgi?id=131281

Reviewed by Timothy Hatcher.

Given a frame, its encoded index is computed by traversing the frame tree
and saving how many nodes have been traversed to reach a given frame.

This is used to disambiguate frames when dispatching frame-specific event
loop inputs during replay, such as timers and resource loaders.

  • replay/SerializationMethods.cpp:

(WebCore::frameIndexFromDocument): Added.
(WebCore::frameIndexFromFrame): Added.
(WebCore::documentFromFrameIndex): Added.
(WebCore::frameFromFrameIndex): Added.

  • replay/SerializationMethods.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r166855 r166856  
     12014-04-06  Brian J. Burg  <burg@cs.washington.edu>
     2
     3        Web Replay: add methods to encode a frame's index based on its FrameTree position
     4        https://bugs.webkit.org/show_bug.cgi?id=131281
     5
     6        Reviewed by Timothy Hatcher.
     7
     8        Given a frame, its encoded index is computed by traversing the frame tree
     9        and saving how many nodes have been traversed to reach a given frame.
     10
     11        This is used to disambiguate frames when dispatching frame-specific event
     12        loop inputs during replay, such as timers and resource loaders.
     13
     14        * replay/SerializationMethods.cpp:
     15        (WebCore::frameIndexFromDocument): Added.
     16        (WebCore::frameIndexFromFrame): Added.
     17        (WebCore::documentFromFrameIndex): Added.
     18        (WebCore::frameFromFrameIndex): Added.
     19        * replay/SerializationMethods.h:
     20
    1212014-04-06  Alexey Proskuryakov  <ap@apple.com>
    222
  • trunk/Source/WebCore/replay/SerializationMethods.cpp

    r166811 r166856  
    3232
    3333#include "AllReplayInputs.h"
     34#include "Document.h"
     35#include "Frame.h"
     36#include "FrameTree.h"
     37#include "MainFrame.h"
     38#include "Page.h"
    3439#include "PlatformKeyboardEvent.h"
    3540#include "PlatformMouseEvent.h"
     
    6166WEB_REPLAY_INPUT_NAMES_FOR_EACH(IMPORT_FROM_WEBCORE_NAMESPACE)
    6267#undef IMPORT_FROM_WEBCORE_NAMESPACE
     68
     69namespace WebCore {
     70
     71unsigned long frameIndexFromDocument(const Document* document)
     72{
     73    ASSERT(document);
     74    ASSERT(document->frame());
     75    return frameIndexFromFrame(document->frame());
     76}
     77
     78unsigned long frameIndexFromFrame(const Frame* targetFrame)
     79{
     80    ASSERT(targetFrame);
     81
     82    unsigned long currentIndex = 0;
     83    const Frame* mainFrame = &targetFrame->tree().top();
     84    for (const Frame* frame = mainFrame; frame; ++currentIndex, frame = frame->tree().traverseNext(mainFrame)) {
     85        if (frame == targetFrame)
     86            return currentIndex;
     87    }
     88
     89    ASSERT_NOT_REACHED();
     90    return 0;
     91}
     92
     93Document* documentFromFrameIndex(Page* page, unsigned long frameIndex)
     94{
     95    Frame* frame = frameFromFrameIndex(page, frameIndex);
     96    return frame ? frame->document() : nullptr;
     97}
     98
     99Frame* frameFromFrameIndex(Page* page, unsigned long frameIndex)
     100{
     101    ASSERT(page);
     102    ASSERT(frameIndex >= 0);
     103
     104    MainFrame* mainFrame = &page->mainFrame();
     105    Frame* frame = mainFrame;
     106    unsigned long currentIndex = 0;
     107    for (; currentIndex < frameIndex && frame; ++currentIndex, frame = frame->tree().traverseNext(mainFrame)) { }
     108
     109    return frame;
     110}
     111
     112} // namespace WebCore
    63113
    64114#define ENCODE_TYPE_WITH_KEY(_encodedValue, _type, _key, _value) \
  • trunk/Source/WebCore/replay/SerializationMethods.h

    r166811 r166856  
    3636
    3737namespace WebCore {
     38
    3839class Document;
    3940class Frame;
     
    4849struct KeypressCommand;
    4950#endif
     51
     52unsigned long frameIndexFromDocument(const Document*);
     53unsigned long frameIndexFromFrame(const Frame*);
     54Document* documentFromFrameIndex(Page*, unsigned long frameIndex);
     55Frame* frameFromFrameIndex(Page*, unsigned long frameIndex);
     56
    5057} // namespace WebCore
    5158
Note: See TracChangeset for help on using the changeset viewer.