Changeset 166856 in webkit
- Timestamp:
- Apr 6, 2014 2:51:34 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r166855 r166856 1 2014-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 1 21 2014-04-06 Alexey Proskuryakov <ap@apple.com> 2 22 -
trunk/Source/WebCore/replay/SerializationMethods.cpp
r166811 r166856 32 32 33 33 #include "AllReplayInputs.h" 34 #include "Document.h" 35 #include "Frame.h" 36 #include "FrameTree.h" 37 #include "MainFrame.h" 38 #include "Page.h" 34 39 #include "PlatformKeyboardEvent.h" 35 40 #include "PlatformMouseEvent.h" … … 61 66 WEB_REPLAY_INPUT_NAMES_FOR_EACH(IMPORT_FROM_WEBCORE_NAMESPACE) 62 67 #undef IMPORT_FROM_WEBCORE_NAMESPACE 68 69 namespace WebCore { 70 71 unsigned long frameIndexFromDocument(const Document* document) 72 { 73 ASSERT(document); 74 ASSERT(document->frame()); 75 return frameIndexFromFrame(document->frame()); 76 } 77 78 unsigned 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 93 Document* documentFromFrameIndex(Page* page, unsigned long frameIndex) 94 { 95 Frame* frame = frameFromFrameIndex(page, frameIndex); 96 return frame ? frame->document() : nullptr; 97 } 98 99 Frame* 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 63 113 64 114 #define ENCODE_TYPE_WITH_KEY(_encodedValue, _type, _key, _value) \ -
trunk/Source/WebCore/replay/SerializationMethods.h
r166811 r166856 36 36 37 37 namespace WebCore { 38 38 39 class Document; 39 40 class Frame; … … 48 49 struct KeypressCommand; 49 50 #endif 51 52 unsigned long frameIndexFromDocument(const Document*); 53 unsigned long frameIndexFromFrame(const Frame*); 54 Document* documentFromFrameIndex(Page*, unsigned long frameIndex); 55 Frame* frameFromFrameIndex(Page*, unsigned long frameIndex); 56 50 57 } // namespace WebCore 51 58
Note: See TracChangeset
for help on using the changeset viewer.