WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
85078
Make DOM Exceptions Errors
https://bugs.webkit.org/show_bug.cgi?id=85078
Summary
Make DOM Exceptions Errors
Erik Arvidsson
Reported
2012-04-27 10:23:23 PDT
There is currently work undergoing to add "stack" to DOM exceptions. Since stack is available on Error object (part of its "interface" in both JSC and V8) it would make sense to make DOM exceptions Error objects (or at least have Error.prototype on its prototype chain).
http://lists.w3.org/Archives/Public/public-script-coord/2012AprJun/0136.html
Attachments
Patch
(49.44 KB, patch)
2012-05-03 14:47 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(56.58 KB, patch)
2012-05-04 14:57 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ec2-cr-linux-01
(6.11 MB, application/zip)
2012-05-04 16:05 PDT
,
WebKit Review Bot
no flags
Details
Patch
(62.10 KB, patch)
2012-05-10 10:15 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(58.51 KB, patch)
2012-05-10 11:53 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(59.00 KB, patch)
2012-05-11 15:30 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(58.94 KB, patch)
2012-05-11 15:51 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(54.63 KB, patch)
2012-05-14 13:56 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(48.54 KB, patch)
2012-05-18 12:28 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ec2-cr-linux-04
(569.15 KB, application/zip)
2012-05-18 13:32 PDT
,
WebKit Review Bot
no flags
Details
Patch
(49.14 KB, patch)
2012-05-24 16:03 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ec2-cr-linux-04
(526.09 KB, application/zip)
2012-05-24 17:57 PDT
,
WebKit Review Bot
no flags
Details
Patch
(48.11 KB, patch)
2012-05-29 12:51 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(47.51 KB, patch)
2012-05-30 12:33 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Patch
(47.96 KB, patch)
2012-05-30 17:17 PDT
,
Erik Arvidsson
no flags
Details
Formatted Diff
Diff
Show Obsolete
(10)
View All
Add attachment
proposed patch, testcase, etc.
Erik Arvidsson
Comment 1
2012-04-27 10:30:59 PDT
Actually, the spec requires this. I missed that the first time.
http://www.w3.org/TR/WebIDL/#es-exception-interface-prototype-object
"Otherwise, the exception is not declared to inherit from another exception. The value of the internal [[Prototype]] property is the Error prototype object ([ECMA-262], section 15.11.3.1)."
Kentaro Hara
Comment 2
2012-04-27 10:31:58 PDT
(In reply to
comment #1
)
> Actually, the spec requires this. I missed that the first time. > >
http://www.w3.org/TR/WebIDL/#es-exception-interface-prototype-object
> > "Otherwise, the exception is not declared to inherit from another exception. The value of the internal [[Prototype]] property is the Error prototype object ([ECMA-262], section 15.11.3.1)."
Sounds great!
Oliver Hunt
Comment 3
2012-04-27 10:54:53 PDT
In JSC it should just magically acquire the stack property.
Erik Arvidsson
Comment 4
2012-05-03 14:47:38 PDT
Created
attachment 140097
[details]
Patch Work in progress
Erik Arvidsson
Comment 5
2012-05-04 14:57:17 PDT
Created
attachment 140333
[details]
Patch
WebKit Review Bot
Comment 6
2012-05-04 16:05:51 PDT
Comment on
attachment 140333
[details]
Patch
Attachment 140333
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/12629306
New failing tests: svg/filters/feBlend-invalid-mode.xhtml
WebKit Review Bot
Comment 7
2012-05-04 16:05:58 PDT
Created
attachment 140350
[details]
Archive of layout-test-results from ec2-cr-linux-01 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: ec2-cr-linux-01 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.35-28-virtual-x86_64-with-Ubuntu-10.10-maverick
Erik Arvidsson
Comment 8
2012-05-10 10:15:22 PDT
Created
attachment 141192
[details]
Patch
Erik Arvidsson
Comment 9
2012-05-10 10:18:57 PDT
Kentaro/Adam, can you look at the V8 bindings? Olliver/Gavin, can you look at the JSC bindings?
Adam Barth
Comment 10
2012-05-10 11:07:15 PDT
Comment on
attachment 141192
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=141192&action=review
V8 changes LGTM
> Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:-1830 > - if (exec->argumentCount() < 2) > - return throwVMError(exec, createNotEnoughArgumentsError(exec));
What's the reason for removing this argumentCount check?
Erik Arvidsson
Comment 11
2012-05-10 11:17:14 PDT
(In reply to
comment #10
)
> > Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:-1830 > > - if (exec->argumentCount() < 2) > > - return throwVMError(exec, createNotEnoughArgumentsError(exec)); > > What's the reason for removing this argumentCount check?
Sigh... This is just a rebaseline of run-binding-tests. Let me fix that.
Erik Arvidsson
Comment 12
2012-05-10 11:53:33 PDT
Created
attachment 141215
[details]
Patch
Kentaro Hara
Comment 13
2012-05-10 16:50:26 PDT
Comment on
attachment 141215
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=141215&action=review
V8 change looks good.
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:123 > + if (!prototypeValue.IsEmpty() && prototypeValue->IsObject())
Nit: Maybe "!prototypeValue.IsEmpty() &&" is not necessary.
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:127 > + if (!prototypeValue.IsEmpty() && prototypeValue->IsObject())
Nit: Ditto.
Erik Arvidsson
Comment 14
2012-05-11 15:30:53 PDT
Created
attachment 141508
[details]
Patch
Erik Arvidsson
Comment 15
2012-05-11 15:51:12 PDT
Created
attachment 141516
[details]
Patch
Erik Arvidsson
Comment 16
2012-05-11 15:54:37 PDT
I expanded the test a bit and incorporated Haraken's feedback. Oliver/Gavin?
Gavin Barraclough
Comment 17
2012-05-12 15:36:23 PDT
Comment on
attachment 141516
[details]
Patch JSC changes look fine to me, I'm hoping Oliver will chime in since he may know more than me about arrays & the DOM. But feel free to go ahead. I'll leave for someone else to r+, since more of the patch is v8 related.
Oliver Hunt
Comment 18
2012-05-13 11:55:16 PDT
Can we separate out the ArrayClass additions from this patch - i don't see any compelling reason to make both changes in the same patch.
Erik Arvidsson
Comment 19
2012-05-14 13:56:01 PDT
Created
attachment 141784
[details]
Patch
Erik Arvidsson
Comment 20
2012-05-14 14:37:16 PDT
(In reply to
comment #18
)
> Can we separate out the ArrayClass additions from this patch - i don't see any compelling reason to make both changes in the same patch.
Done. PTAL.
Kentaro Hara
Comment 21
2012-05-14 14:54:41 PDT
Comment on
attachment 141784
[details]
Patch r+ for the V8 part
Darin Adler
Comment 22
2012-05-14 16:28:19 PDT
Comment on
attachment 141784
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=141784&action=review
> LayoutTests/platform/chromium/fast/dom/insertAdjacentHTML-DocumentFragment-crash-expected.txt:1 > +CONSOLE MESSAGE: line 9: Uncaught NO_MODIFICATION_ALLOWED_ERR: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7
These are really strange error messages, repeating the name of the error twice. Are you sure this is the format we want?
Erik Arvidsson
Comment 23
2012-05-14 16:45:37 PDT
(In reply to
comment #22
)
> (From update of
attachment 141784
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=141784&action=review
> > > LayoutTests/platform/chromium/fast/dom/insertAdjacentHTML-DocumentFragment-crash-expected.txt:1 > > +CONSOLE MESSAGE: line 9: Uncaught NO_MODIFICATION_ALLOWED_ERR: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7 > > These are really strange error messages, repeating the name of the error twice. Are you sure this is the format we want?
I started investigating this last week but I could not figure it out. The error that is printed in the console is "Error: HIERARCHY_REQUEST_ERR: DOM Exception 3" but the error that is printed by DumpRenderTree is "HIERARCHY_REQUEST_ERR: HIERARCHY_REQUEST_ERR: DOM Exception 3" I'll post a new patch once/if I figure this out.
Erik Arvidsson
Comment 24
2012-05-16 15:27:43 PDT
This is blocked by
http://code.google.com/p/v8/issues/detail?id=2138
Erik Arvidsson
Comment 25
2012-05-18 12:28:17 PDT
Created
attachment 142762
[details]
Patch
Erik Arvidsson
Comment 26
2012-05-18 12:30:36 PDT
Please take another look. Darin: The V8 bug has been fixed so the *-expected.txt do not print the name twice. Oliver: ArrayClass has been removed from this patch.
WebKit Review Bot
Comment 27
2012-05-18 13:32:26 PDT
Comment on
attachment 142762
[details]
Patch
Attachment 142762
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/12718963
New failing tests: fast/dynamic/015.html fast/dom/timer-clear-interval-in-handler-and-generate-error.html fast/inspector-support/uncaught-dom8-exception.html fast/inspector-support/uncaught-dom3-exception.html fast/inspector-support/uncaught-dom1-exception.html fast/dom/NamedNodeMap-setNamedItem-crash.html fast/events/remove-target-with-shadow-in-drag.html fast/dom/insertAdjacentHTML-DocumentFragment-crash.html
WebKit Review Bot
Comment 28
2012-05-18 13:32:32 PDT
Created
attachment 142778
[details]
Archive of layout-test-results from ec2-cr-linux-04 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: ec2-cr-linux-04 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.35-28-virtual-x86_64-with-Ubuntu-10.10-maverick
Erik Arvidsson
Comment 29
2012-05-18 13:54:28 PDT
Strange, I thought the V8 roll had happened. I'll check back next week
Kentaro Hara
Comment 30
2012-05-18 13:57:09 PDT
(In reply to
comment #29
)
> Strange, I thought the V8 roll had happened. I'll check back next week
Maybe you need to ask the sheriff-bot to roll out DEPS of chromium-ews?
Erik Arvidsson
Comment 31
2012-05-24 16:03:17 PDT
Created
attachment 143914
[details]
Patch
Eric Seidel (no email)
Comment 32
2012-05-24 16:50:09 PDT
Comment on
attachment 143914
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=143914&action=review
> Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.h:27 > +#include <runtime/ObjectPrototype.h>
I'm confused why this is needed.
> Source/WebCore/bindings/scripts/test/JS/JSTestNode.h:28 > +#include <runtime/ObjectPrototype.h>
Why is this needed? Is this auto-generated code?
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:59 > +#define V8_STORE_PRIMORDIAL(name, Name) \
Macro sadness. :(
> Source/WebCore/bindings/v8/V8HiddenPropertyName.h:-39 > - V(objectPrototype) \
?
Erik Arvidsson
Comment 33
2012-05-24 17:20:44 PDT
Comment on
attachment 143914
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=143914&action=review
>> Source/WebCore/bindings/scripts/test/JS/JSTestNode.h:28 >> +#include <runtime/ObjectPrototype.h> > > Why is this needed? Is this auto-generated code?
It is auto generated but I can change the generated code to not add this here
>> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:59 >> +#define V8_STORE_PRIMORDIAL(name, Name) \ > > Macro sadness. :(
V8 API is pretty verbose. Without a macro this code has to be duplicated (and one more time for ArrayClass if we ever dare try that again).
>> Source/WebCore/bindings/v8/V8HiddenPropertyName.h:-39 >> - V(objectPrototype) \ > > ?
Not used. I guess someone forgot to remove it earlier (probably me).
WebKit Review Bot
Comment 34
2012-05-24 17:57:11 PDT
Comment on
attachment 143914
[details]
Patch
Attachment 143914
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/12793327
New failing tests: svg/filters/feBlend-invalid-mode.xhtml
WebKit Review Bot
Comment 35
2012-05-24 17:57:17 PDT
Created
attachment 143938
[details]
Archive of layout-test-results from ec2-cr-linux-04 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: ec2-cr-linux-04 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.35-28-virtual-x86_64-with-Ubuntu-10.10-maverick
Erik Arvidsson
Comment 36
2012-05-29 12:51:25 PDT
Created
attachment 144602
[details]
Patch
Eric Seidel (no email)
Comment 37
2012-05-29 13:30:24 PDT
Comment on
attachment 144602
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=144602&action=review
> Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2441 > + my $WrapperTypePrototype = $dataNode->isException ? "WrapperTypeErrorPrototype" : "WrapperTypeObjectPrototype";
I'm slightly confused as to why you have to add this enum. I guess the info structs are short-cuts for initializing objects? We must have objects in V8 which inherit from something other than object directly. How do they get initialized? Why wouldn't objects which inherit from Error do the same? Is this enum just to make it so the shortcut can be used for either Object or Error subclasses?
Erik Arvidsson
Comment 38
2012-05-29 14:17:53 PDT
(In reply to
comment #37
)
> (From update of
attachment 144602
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=144602&action=review
> > > Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2441 > > + my $WrapperTypePrototype = $dataNode->isException ? "WrapperTypeErrorPrototype" : "WrapperTypeObjectPrototype"; > > I'm slightly confused as to why you have to add this enum. I guess the info structs are short-cuts for initializing objects? We must have objects in V8 which inherit from something other than object directly. How do they get initialized? Why wouldn't objects which inherit from Error do the same? Is this enum just to make it so the shortcut can be used for either Object or Error subclasses?
DOM wrappers are created from FunctionTemplates. A FunctionTemplate can inherit from another FunctionTemplate and that causes the prototype chain to be set up correctly. However, FunctionTemplate cannot inherit from an object. To achieve that we therefore set the prototype when we create the constructor function (this happens once per context since the constructor objects are cached).
Eric Seidel (no email)
Comment 39
2012-05-29 16:09:30 PDT
Comment on
attachment 144602
[details]
Patch The code looks fine, I'd like someone with V8 knowledge to take a look.
Erik Arvidsson
Comment 40
2012-05-29 17:16:25 PDT
Anton, Haraken: Any comments?
Kentaro Hara
Comment 41
2012-05-29 17:34:21 PDT
Comment on
attachment 144602
[details]
Patch LGTM
Erik Arvidsson
Comment 42
2012-05-30 12:33:59 PDT
Created
attachment 144896
[details]
Patch
Eric Seidel (no email)
Comment 43
2012-05-30 14:49:31 PDT
Comment on
attachment 144896
[details]
Patch LGTM.
Erik Arvidsson
Comment 44
2012-05-30 17:01:02 PDT
Oliver: Any final comments?
Oliver Hunt
Comment 45
2012-05-30 17:04:07 PDT
Comment on
attachment 144896
[details]
Patch If you're adding a new reference to the ErrorPrototype you need to mark it - look for how m_regExpPrototype, etc are marked
Erik Arvidsson
Comment 46
2012-05-30 17:16:20 PDT
(In reply to
comment #45
)
> (From update of
attachment 144896
[details]
) > If you're adding a new reference to the ErrorPrototype you need to mark it - look for how m_regExpPrototype, etc are marked
I assume you mean like this? diff --git a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp index 645fa04..fb523ec 100644 --- a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp +++ b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp @@ -374,6 +374,7 @@ void JSGlobalObject::visitChildren(JSCell* cell, SlotVisitor& visitor) visitIfNeeded(visitor, &thisObject->m_numberPrototype); visitIfNeeded(visitor, &thisObject->m_datePrototype); visitIfNeeded(visitor, &thisObject->m_regExpPrototype); + visitIfNeeded(visitor, &thisObject->m_errorPrototype); visitIfNeeded(visitor, &thisObject->m_argumentsStructure); visitIfNeeded(visitor, &thisObject->m_arrayStructure);
Erik Arvidsson
Comment 47
2012-05-30 17:17:14 PDT
Created
attachment 144952
[details]
Patch
Oliver Hunt
Comment 48
2012-05-30 17:18:52 PDT
Comment on
attachment 144952
[details]
Patch r=me, assuming no changes to the V8 stuff
WebKit Review Bot
Comment 49
2012-05-31 11:00:24 PDT
Comment on
attachment 144952
[details]
Patch Clearing flags on attachment: 144952 Committed
r119124
: <
http://trac.webkit.org/changeset/119124
>
WebKit Review Bot
Comment 50
2012-05-31 11:00:32 PDT
All reviewed patches have been landed. Closing bug.
anton muhin
Comment 51
2012-05-31 11:03:39 PDT
Comment on
attachment 144602
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=144602&action=review
Sorry for late response, I was on vacation. Where do you initlialize m_errorPrototype in V8 bindings? Overall, cannot we move logic to setup prototype in function template generating?
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:59 > +#define V8_STORE_PRIMORDIAL(name, Name) \
up to you, but I would rather put most of the logic into a function and keep macro minimal to ease debugging/stack trace analysis.
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:63 > + if (symbol.IsEmpty()) \
do you really need this check?
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:65 > + v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(m_context->Global()->Get(symbol)); \
.As<v8::Object>() is a better option imho
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:77 > + if (prototypeString.IsEmpty())
ditto
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:119 > + v8::Local<v8::Value> prototypeValue = function->Get(v8::String::NewSymbol("prototype"));
do you need a designated local for prototypeValue?
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:120 > + if (prototypeValue->IsObject())
when this check fails?
> Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:121 > + v8::Local<v8::Object>::Cast(prototypeValue)->SetPrototype(m_errorPrototype.get());
again, .As<...>
Erik Arvidsson
Comment 52
2012-05-31 11:20:53 PDT
(In reply to
comment #51
)
> (From update of
attachment 144602
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=144602&action=review
> > Sorry for late response, I was on vacation. > > Where do you initlialize m_errorPrototype in V8 bindings?
It is done in V8BindingPerContextData::init()
> Overall, cannot we move logic to setup prototype in function template generating?
No. FunctionTemplate can only inherit another FunctionTemplate, not a JS object. Yeah, this is backwards, maybe we should update the V8 API here?
> > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:59 > > +#define V8_STORE_PRIMORDIAL(name, Name) \ > > up to you, but I would rather put most of the logic into a function and keep macro minimal to ease debugging/stack trace analysis. > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:63 > > + if (symbol.IsEmpty()) \ > > do you really need this check?
OOM check. All V8 functions can return an empty object. Maybe this is too defensive?
> > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:65 > > + v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(m_context->Global()->Get(symbol)); \ > > .As<v8::Object>() is a better option imho
I go back and forth on this. I think that C++ programmers are more used to Cast but As is slight;y shorter.
> > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:77 > > + if (prototypeString.IsEmpty()) > > ditto > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:119 > > + v8::Local<v8::Value> prototypeValue = function->Get(v8::String::NewSymbol("prototype")); > > do you need a designated local for prototypeValue?
Same here... something might go wrong.
> > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:120 > > + if (prototypeValue->IsObject()) > > when this check fails? > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:121 > > + v8::Local<v8::Object>::Cast(prototypeValue)->SetPrototype(m_errorPrototype.get()); > > again, .As<...>
This code is only run once so the extra checks are not really a perf issue but I agree with you that this code is maybe too defensive and if any of these checks fail we are pretty much screwed any way. I can do a follow up patch if you want?
anton muhin
Comment 53
2012-05-31 11:32:08 PDT
(In reply to
comment #52
)
> (In reply to
comment #51
) > > (From update of
attachment 144602
[details]
[details]) > > View in context:
https://bugs.webkit.org/attachment.cgi?id=144602&action=review
> > > > Sorry for late response, I was on vacation. > > > > Where do you initlialize m_errorPrototype in V8 bindings? > > It is done in V8BindingPerContextData::init()
Thanks, missed that behind the macros.
> > > Overall, cannot we move logic to setup prototype in function template generating? > > No. FunctionTemplate can only inherit another FunctionTemplate, not a JS object. Yeah, this is backwards, maybe we should update the V8 API here?
Alas---templates are not context-sensitive while objects are, hence it's that way. I was just hoping we may construct this Error from bindings code, but it's apparently not the case. I am just really concerned with WrapperTypeInfo growing bigger and bigger.
> > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:59 > > > +#define V8_STORE_PRIMORDIAL(name, Name) \ > > > > up to you, but I would rather put most of the logic into a function and keep macro minimal to ease debugging/stack trace analysis. > > > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:63 > > > + if (symbol.IsEmpty()) \ > > > > do you really need this check? > > OOM check. All V8 functions can return an empty object. Maybe this is too defensive?
No, v8 API never returns empty handle due to OOM: it'll try to GC heap and if even after GC the object cannot be allocated, VM will just kill the process. Typical reason for V8 API to return an empty handle is an exception thrown.
> > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:65 > > > + v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(m_context->Global()->Get(symbol)); \ > > > > .As<v8::Object>() is a better option imho > > I go back and forth on this. I think that C++ programmers are more used to Cast but As is slight;y shorter.
At least when conceived, As<...> were planned as replacement for Cast :) But it's stylistic.
> > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:77 > > > + if (prototypeString.IsEmpty()) > > > > ditto > > > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:119 > > > + v8::Local<v8::Value> prototypeValue = function->Get(v8::String::NewSymbol("prototype")); > > > > do you need a designated local for prototypeValue? > > Same here... something might go wrong. > > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:120 > > > + if (prototypeValue->IsObject()) > > > > when this check fails? > > > > > Source/WebCore/bindings/v8/V8BindingPerContextData.cpp:121 > > > + v8::Local<v8::Object>::Cast(prototypeValue)->SetPrototype(m_errorPrototype.get()); > > > > again, .As<...> > > This code is only run once so the extra checks are not really a perf issue but I agree with you that this code is maybe too defensive and if any of these checks fail we are pretty much screwed any way.
I am not concerned with performance, but rather with making code harder to understand: no one should go paranoid what's the edge case is.
> I can do a follow up patch if you want?
That's completely up to you.
Tim Horton
Comment 54
2012-05-31 14:35:05 PDT
Why did you add new chromium platform-specific layout test results instead of updating the shared results?
Erik Arvidsson
Comment 55
2012-05-31 14:46:05 PDT
(In reply to
comment #54
)
> Why did you add new chromium platform-specific layout test results instead of updating the shared results?
Not sure what you mean here. I consolidated chromium-win/chromium-mac to chromium
Tim Horton
Comment 56
2012-05-31 15:02:27 PDT
(In reply to
comment #55
)
> (In reply to
comment #54
) > > Why did you add new chromium platform-specific layout test results instead of updating the shared results? > > Not sure what you mean here. I consolidated chromium-win/chromium-mac to chromium
Ah. Still:
http://trac.webkit.org/changeset/119137
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug