Changeset 171528 in webkit


Ignore:
Timestamp:
Jul 24, 2014 3:11:12 PM (10 years ago)
Author:
Brian Burg
Message:

Web Replay: don't encode/decode primitive types that lack explicit sizes
https://bugs.webkit.org/show_bug.cgi?id=133430

Reviewed by Anders Carlsson.

Source/JavaScriptCore:
Don't support encode/decode of unsigned long, since its size is compiler-dependent.

  • replay/EncodedValue.cpp:

(JSC::EncodedValue::convertTo<unsigned long>):
(JSC::unsigned long>::encodeValue): Deleted.

  • replay/EncodedValue.h:

Source/WebCore:
Remove uses of unsigned long in encode/decode methods because the type lacks an
explicit size. Move frame index serialization away from using unsigned long.

  • replay/ReplayController.cpp:

(WebCore::logDispatchedDOMEvent): Fix the format string.

  • replay/SerializationMethods.cpp:

(WebCore::frameIndexFromDocument):
(WebCore::frameIndexFromFrame):
(WebCore::documentFromFrameIndex):
(WebCore::frameFromFrameIndex):
(JSC::EncodingTraits<PluginData>::encodeValue):
(JSC::EncodingTraits<PluginData>::decodeValue):

  • replay/SerializationMethods.h:
  • replay/WebInputs.json: Remove primitive types without explicit sizes.
Location:
trunk/Source
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r171527 r171528  
     12014-07-24  Brian J. Burg  <burg@cs.washington.edu>
     2
     3        Web Replay: don't encode/decode primitive types that lack explicit sizes
     4        https://bugs.webkit.org/show_bug.cgi?id=133430
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Don't support encode/decode of unsigned long, since its size is compiler-dependent.
     9
     10        * replay/EncodedValue.cpp:
     11        (JSC::EncodedValue::convertTo<unsigned long>):
     12        (JSC::unsigned long>::encodeValue): Deleted.
     13        * replay/EncodedValue.h:
     14
    1152014-07-24  Mark Lam  <mark.lam@apple.com>
    216
  • trunk/Source/JavaScriptCore/replay/EncodedValue.cpp

    r167085 r171528  
    9191}
    9292
    93 template<> EncodedValue ScalarEncodingTraits<unsigned long>::encodeValue(const unsigned long& value)
    94 {
    95     return EncodedValue(InspectorBasicValue::create((double)value));
    96 }
    97 
    9893template<> bool EncodedValue::convertTo<bool>()
    9994{
     
    159154}
    160155
    161 template<> unsigned long EncodedValue::convertTo<unsigned long>()
    162 {
    163     unsigned long result;
    164     bool castSucceeded = m_value->asNumber(&result);
    165     ASSERT_UNUSED(castSucceeded, castSucceeded);
    166 
    167     return result;
    168 }
    169 
    170156template<> String EncodedValue::convertTo<String>()
    171157{
  • trunk/Source/JavaScriptCore/replay/EncodedValue.h

    r170774 r171528  
    9393template<> JS_EXPORT_PRIVATE uint32_t EncodedValue::convertTo<uint32_t>();
    9494template<> JS_EXPORT_PRIVATE uint64_t EncodedValue::convertTo<uint64_t>();
    95 template<> JS_EXPORT_PRIVATE unsigned long EncodedValue::convertTo<unsigned long>();
    9695template<> JS_EXPORT_PRIVATE String EncodedValue::convertTo<String>();
    9796
     
    157156template<> struct EncodingTraits<uint32_t> : public ScalarEncodingTraits<uint32_t> { };
    158157template<> struct EncodingTraits<uint64_t> : public ScalarEncodingTraits<uint64_t> { };
    159 template<> struct EncodingTraits<unsigned long> : public ScalarEncodingTraits<unsigned long> { };
    160158
    161159template<> struct EncodingTraits<String> : public ScalarEncodingTraits<String> {
  • trunk/Source/WebCore/ChangeLog

    r171526 r171528  
     12014-07-24  Brian J. Burg  <burg@cs.washington.edu>
     2
     3        Web Replay: don't encode/decode primitive types that lack explicit sizes
     4        https://bugs.webkit.org/show_bug.cgi?id=133430
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Remove uses of unsigned long in encode/decode methods because the type lacks an
     9        explicit size. Move frame index serialization away from using unsigned long.
     10
     11        * replay/ReplayController.cpp:
     12        (WebCore::logDispatchedDOMEvent): Fix the format string.
     13        * replay/SerializationMethods.cpp:
     14        (WebCore::frameIndexFromDocument):
     15        (WebCore::frameIndexFromFrame):
     16        (WebCore::documentFromFrameIndex):
     17        (WebCore::frameFromFrameIndex):
     18        (JSC::EncodingTraits<PluginData>::encodeValue):
     19        (JSC::EncodingTraits<PluginData>::decodeValue):
     20        * replay/SerializationMethods.h:
     21        * replay/WebInputs.json: Remove primitive types without explicit sizes.
     22
    1232014-07-24  Pratik Solanki  <psolanki@apple.com>
    224
  • trunk/Source/WebCore/replay/ReplayController.cpp

    r170774 r171528  
    6868    // A DOM event is unrelated if it is being dispatched to a document that is neither capturing nor replaying.
    6969    if (Node* node = target->toNode()) {
    70         LOG(WebReplay, "%-20s --->%s DOM event: type=%s, target=%lu/node[%p] %s\n", "ReplayEvents",
     70        LOG(WebReplay, "%-20s --->%s DOM event: type=%s, target=%u/node[%p] %s\n", "ReplayEvents",
    7171            (eventIsUnrelated) ? "Unrelated" : "Dispatching",
    7272            event.type().string().utf8().data(),
     
    7575            node->nodeName().utf8().data());
    7676    } else if (DOMWindow* window = target->toDOMWindow()) {
    77         LOG(WebReplay, "%-20s --->%s DOM event: type=%s, target=%lu/window[%p] %s\n", "ReplayEvents",
     77        LOG(WebReplay, "%-20s --->%s DOM event: type=%s, target=%u/window[%p] %s\n", "ReplayEvents",
    7878            (eventIsUnrelated) ? "Unrelated" : "Dispatching",
    7979            event.type().string().utf8().data(),
  • trunk/Source/WebCore/replay/SerializationMethods.cpp

    r170774 r171528  
    7373namespace WebCore {
    7474
    75 unsigned long frameIndexFromDocument(const Document* document)
     75uint32_t frameIndexFromDocument(const Document* document)
    7676{
    7777    ASSERT(document);
     
    8080}
    8181
    82 unsigned long frameIndexFromFrame(const Frame* targetFrame)
     82uint32_t frameIndexFromFrame(const Frame* targetFrame)
    8383{
    8484    ASSERT(targetFrame);
    8585
    86     unsigned long currentIndex = 0;
     86    uint32_t currentIndex = 0;
    8787    const Frame* mainFrame = &targetFrame->tree().top();
    8888    for (const Frame* frame = mainFrame; frame; ++currentIndex, frame = frame->tree().traverseNext(mainFrame)) {
     
    9595}
    9696
    97 Document* documentFromFrameIndex(Page* page, unsigned long frameIndex)
     97Document* documentFromFrameIndex(Page* page, uint32_t frameIndex)
    9898{
    9999    Frame* frame = frameFromFrameIndex(page, frameIndex);
     
    101101}
    102102
    103 Frame* frameFromFrameIndex(Page* page, unsigned long frameIndex)
     103Frame* frameFromFrameIndex(Page* page, uint32_t frameIndex)
    104104{
    105105    ASSERT(page);
     
    108108    MainFrame* mainFrame = &page->mainFrame();
    109109    Frame* frame = mainFrame;
    110     unsigned long currentIndex = 0;
     110    uint32_t currentIndex = 0;
    111111    for (; currentIndex < frameIndex && frame; ++currentIndex, frame = frame->tree().traverseNext(mainFrame)) { }
    112112
     
    295295#endif
    296296
    297     PlatformKeyboardEvent platformEvent = PlatformKeyboardEvent(type, text, unmodifiedText, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, macCharCode, autoRepeat, keypad, systemKey, modifiers, timestamp);
     297    PlatformKeyboardEvent platformEvent = PlatformKeyboardEvent(type, text, unmodifiedText, keyIdentifier, WTF::safeCast<int>(windowsVirtualKeyCode), WTF::safeCast<int>(nativeVirtualKeyCode), WTF::safeCast<int>(macCharCode), autoRepeat, keypad, systemKey, modifiers, timestamp);
    298298#if USE(APPKIT)
    299299    input = std::make_unique<PlatformKeyboardEventAppKit>(platformEvent, handledByInputMethod, commands);
     
    446446    EncodedValue encodedData = EncodedValue::createObject();
    447447
     448    Vector<uint32_t> castedMimePluginIndices(input->mimePluginIndices().size());
     449    for (uint32_t index : input->mimePluginIndices())
     450        castedMimePluginIndices.append(WTF::safeCast<uint32_t>(index));
     451
    448452    ENCODE_TYPE_WITH_KEY(encodedData, Vector<PluginInfo>, plugins, input->plugins());
    449453    ENCODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes, input->mimes());
    450     ENCODE_TYPE_WITH_KEY(encodedData, Vector<size_t>, mimePluginIndices, input->mimePluginIndices());
     454    ENCODE_TYPE_WITH_KEY(encodedData, Vector<uint32_t>, mimePluginIndices, castedMimePluginIndices);
    451455
    452456    return encodedData;
     
    465469    DECODE_TYPE_WITH_KEY(encodedData, Vector<PluginInfo>, plugins);
    466470    DECODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes);
    467     DECODE_TYPE_WITH_KEY(encodedData, Vector<size_t>, mimePluginIndices);
    468 
    469     input = adoptRef(new DeserializedPluginData(plugins, mimes, mimePluginIndices));
     471    DECODE_TYPE_WITH_KEY(encodedData, Vector<uint32_t>, mimePluginIndices);
     472
     473    Vector<size_t> castedMimePluginIndices(mimePluginIndices.size());
     474    for (uint32_t index : mimePluginIndices)
     475        castedMimePluginIndices.append(WTF::safeCast<size_t>(index));
     476
     477    input = adoptRef(new DeserializedPluginData(plugins, mimes, castedMimePluginIndices));
    470478
    471479    return true;
  • trunk/Source/WebCore/replay/SerializationMethods.h

    r167085 r171528  
    5151#endif
    5252
    53 unsigned long frameIndexFromDocument(const Document*);
    54 unsigned long frameIndexFromFrame(const Frame*);
    55 Document* documentFromFrameIndex(Page*, unsigned long frameIndex);
    56 Frame* frameFromFrameIndex(Page*, unsigned long frameIndex);
     53uint32_t frameIndexFromDocument(const Document*);
     54uint32_t frameIndexFromFrame(const Frame*);
     55Document* documentFromFrameIndex(Page*, uint32_t frameIndex);
     56Frame* frameFromFrameIndex(Page*, uint32_t frameIndex);
    5757
    5858} // namespace WebCore
  • trunk/Source/WebCore/replay/WebInputs.json

    r167406 r171528  
    44            { "name": "bool", "mode": "SCALAR" },
    55            { "name": "double", "mode": "SCALAR" },
    6             { "name": "int", "mode": "SCALAR" },
    7             { "name": "unsigned", "mode": "SCALAR" },
    8             { "name": "unsigned long", "mode": "SCALAR" },
    9             { "name": "unsigned long long", "mode": "SCALAR" }
     6            { "name": "uint32_t", "mode": "SCALAR", "description": "Unsigned 32-bit integer." },
     7            { "name": "uint64_t", "mode": "SCALAR", "description": "Unsigned 64-bit integer." },
     8            { "name": "int32_t", "mode": "SCALAR", "description": "Signed 32-bit integer." },
     9            { "name": "int64_t", "mode": "SCALAR", "description": "Signed 64-bit integer." }
    1010        ],
    1111
Note: See TracChangeset for help on using the changeset viewer.