IE9 dom fixes: Add check for __proto__ before using it and add some name workarounds. (issue 8277016)

17 views
Skip to first unread message

p...@google.com

unread,
Oct 13, 2011, 4:28:28 PM10/13/11
to v...@google.com, s...@chromium.org, rev...@dartlang.org
Reviewers: vsm, sra,

Description:
IE9 dom fixes: Add check for __proto__ before using it and add some name
workarounds.

Please review this at http://codereview.chromium.org/8277016/

SVN Base: https://dart.googlecode.com/svn/branches/bleeding_edge/dart

Affected files:
M client/dom/generated/wrapping_dom.js
M client/dom/scripts/template_wrapping_dom.js


Index: client/dom/generated/wrapping_dom.js
diff --git a/client/dom/generated/wrapping_dom.js
b/client/dom/generated/wrapping_dom.js
index
d4829a76d354ff7841ad3db51f6edc54cbcec5b6..7ce1c0da5c12b9864708e3e76106b77ca47980d7
100644
--- a/client/dom/generated/wrapping_dom.js
+++ b/client/dom/generated/wrapping_dom.js
@@ -26680,7 +26680,10 @@ var __dom_type_map = {

// Patches for non-WebKit browsers
'Window':
native__DOMWindowWrappingImplementation_create__DOMWindowWrappingImplementation,
- 'global':
native__DOMWindowWrappingImplementation_create__DOMWindowWrappingImplementation
+ 'global':
native__DOMWindowWrappingImplementation_create__DOMWindowWrappingImplementation,
+ 'KeyEvent':
native__KeyboardEventWrappingImplementation_create__KeyboardEventWrappingImplementation,
// Opera
+ 'HTMLPhraseElement':
native__HTMLElementWrappingImplementation_create__HTMLElementWrappingImplementation,
// IE9
+ 'MSStyleCSSProperties':
native__CSSStyleDeclarationWrappingImplementation_create__CSSStyleDeclarationWrappingImplementation
// IE9
};

function __dom_get_class_chrome(ptr) {
@@ -26688,18 +26691,27 @@ function __dom_get_class_chrome(ptr) {
}

function __dom_get_class_generic(ptr) {
- var isolatetoken = __dom_isolate_token();
- var result = __dom_get_cached('dart_class', ptr.__proto__, isolatetoken);
- if (result) {
- return result;
- }
var str = Object.prototype.toString.call(ptr);
var name = str.substring(8, str.length - 1);
var cls = __dom_type_map[name];
- __dom_set_cached('dart_class', ptr.__proto__, isolatetoken, cls);
return cls;
}

+if (Object.__proto__) {
+ __dom_get_class_generic = function(ptr) {
+ var isolatetoken = __dom_isolate_token();
+ var result = __dom_get_cached('dart_class', ptr.__proto__,
isolatetoken);
+ if (result) {
+ return result;
+ }
+ var str = Object.prototype.toString.call(ptr);
+ var name = str.substring(8, str.length - 1);
+ var cls = __dom_type_map[name];
+ __dom_set_cached('dart_class', ptr.__proto__, isolatetoken, cls);
+ return cls;
+ }
+}
+
var __dom_get_class = __dom_get_class_generic;
if (typeof window !== 'undefined' && // webworkers don't have a window
window.constructor.name == "DOMWindow") {
Index: client/dom/scripts/template_wrapping_dom.js
diff --git a/client/dom/scripts/template_wrapping_dom.js
b/client/dom/scripts/template_wrapping_dom.js
index
1634ff35b583a180128f77b53d33065702e8b214..adee42977b7ce565093bc61cda3f11f965c6ed4d
100644
--- a/client/dom/scripts/template_wrapping_dom.js
+++ b/client/dom/scripts/template_wrapping_dom.js
@@ -174,7 +174,10 @@ var __dom_type_map = {
$!MAP
// Patches for non-WebKit browsers
'Window':
native__DOMWindowWrappingImplementation_create__DOMWindowWrappingImplementation,
- 'global':
native__DOMWindowWrappingImplementation_create__DOMWindowWrappingImplementation
+ 'global':
native__DOMWindowWrappingImplementation_create__DOMWindowWrappingImplementation,
+ 'KeyEvent':
native__KeyboardEventWrappingImplementation_create__KeyboardEventWrappingImplementation,
// Opera
+ 'HTMLPhraseElement':
native__HTMLElementWrappingImplementation_create__HTMLElementWrappingImplementation,
// IE9
+ 'MSStyleCSSProperties':
native__CSSStyleDeclarationWrappingImplementation_create__CSSStyleDeclarationWrappingImplementation
// IE9
};

function __dom_get_class_chrome(ptr) {
@@ -182,18 +185,27 @@ function __dom_get_class_chrome(ptr) {
}

function __dom_get_class_generic(ptr) {
- var isolatetoken = __dom_isolate_token();
- var result = __dom_get_cached('dart_class', ptr.__proto__, isolatetoken);
- if (result) {
- return result;
- }
var str = Object.prototype.toString.call(ptr);
var name = str.substring(8, str.length - 1);
var cls = __dom_type_map[name];
- __dom_set_cached('dart_class', ptr.__proto__, isolatetoken, cls);
return cls;
}

+if (Object.__proto__) {
+ __dom_get_class_generic = function(ptr) {
+ var isolatetoken = __dom_isolate_token();
+ var result = __dom_get_cached('dart_class', ptr.__proto__,
isolatetoken);
+ if (result) {
+ return result;
+ }
+ var str = Object.prototype.toString.call(ptr);
+ var name = str.substring(8, str.length - 1);
+ var cls = __dom_type_map[name];
+ __dom_set_cached('dart_class', ptr.__proto__, isolatetoken, cls);
+ return cls;
+ }
+}
+
var __dom_get_class = __dom_get_class_generic;
if (typeof window !== 'undefined' && // webworkers don't have a window
window.constructor.name == "DOMWindow") {


p...@google.com

unread,
Oct 14, 2011, 2:57:37 PM10/14/11
to v...@google.com, s...@chromium.org, jac...@google.com, rev...@dartlang.org

jac...@google.com

unread,
Oct 14, 2011, 4:01:28 PM10/14/11
to p...@google.com, v...@google.com, s...@chromium.org, rev...@dartlang.org

p...@google.com

unread,
Oct 14, 2011, 4:26:32 PM10/14/11
to v...@google.com, s...@chromium.org, jac...@google.com, rev...@dartlang.org
On 2011/10/14 20:01:28, jacobr wrote:
> lgtm

Thanks for the review!
Committed as http://code.google.com/p/dart/source/detail?r=452

http://codereview.chromium.org/8277016/

Reply all
Reply to author
Forward
0 new messages