| OLD | NEW |
| 1 // Copyright (c) 2008, Google Inc. | 1 // Copyright (c) 2008, Google Inc. |
| 2 // All rights reserved. | 2 // All rights reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
| 9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
| 10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
| (...skipping 1442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1453 { | 1453 { |
| 1454 ASSERT(ContextInitialized()); | 1454 ASSERT(ContextInitialized()); |
| 1455 v8::Local<v8::Value> cached = | 1455 v8::Local<v8::Value> cached = |
| 1456 m_dom_constructor_cache->Get(v8::Integer::New(V8ClassIndex::ToInt(t))); | 1456 m_dom_constructor_cache->Get(v8::Integer::New(V8ClassIndex::ToInt(t))); |
| 1457 if (cached->IsFunction()) { | 1457 if (cached->IsFunction()) { |
| 1458 return v8::Local<v8::Function>::Cast(cached); | 1458 return v8::Local<v8::Function>::Cast(cached); |
| 1459 } | 1459 } |
| 1460 | 1460 |
| 1461 // Not in cache. | 1461 // Not in cache. |
| 1462 { | 1462 { |
| 1463 // Enter the context of the proxy to make sure that the |
| 1464 // function is constructed in the context corresponding to |
| 1465 // this proxy. |
| 1466 v8::Context::Scope scope(m_context); |
| 1463 v8::Handle<v8::FunctionTemplate> templ = GetTemplate(t); | 1467 v8::Handle<v8::FunctionTemplate> templ = GetTemplate(t); |
| 1468 // Getting the function might fail if we're running out of |
| 1469 // stack or memory. |
| 1464 v8::TryCatch try_catch; | 1470 v8::TryCatch try_catch; |
| 1465 // This might fail if we're running out of stack or memory. | |
| 1466 v8::Local<v8::Function> value = templ->GetFunction(); | 1471 v8::Local<v8::Function> value = templ->GetFunction(); |
| 1467 if (value.IsEmpty()) | 1472 if (value.IsEmpty()) |
| 1468 return v8::Local<v8::Function>(); | 1473 return v8::Local<v8::Function>(); |
| 1469 m_dom_constructor_cache->Set(v8::Integer::New(t), value); | 1474 m_dom_constructor_cache->Set(v8::Integer::New(t), value); |
| 1470 // Hotmail fix, see comments in v8_proxy.h above | 1475 // Hotmail fix, see comments in v8_proxy.h above |
| 1471 // m_dom_constructor_cache. | 1476 // m_dom_constructor_cache. |
| 1472 value->Set(v8::String::New("__proto__"), m_object_prototype); | 1477 value->Set(v8::String::New("__proto__"), m_object_prototype); |
| 1473 return value; | 1478 return value; |
| 1474 } | 1479 } |
| 1475 } | 1480 } |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1769 // JS world, but we setup the constructor function lazily in | 1774 // JS world, but we setup the constructor function lazily in |
| 1770 // WindowNamedPropertyHandler::get. | 1775 // WindowNamedPropertyHandler::get. |
| 1771 case V8ClassIndex::DOMPARSER: | 1776 case V8ClassIndex::DOMPARSER: |
| 1772 desc->SetCallHandler(USE_CALLBACK(DOMParserConstructor)); | 1777 desc->SetCallHandler(USE_CALLBACK(DOMParserConstructor)); |
| 1773 break; | 1778 break; |
| 1774 case V8ClassIndex::XMLSERIALIZER: | 1779 case V8ClassIndex::XMLSERIALIZER: |
| 1775 desc->SetCallHandler(USE_CALLBACK(XMLSerializerConstructor)); | 1780 desc->SetCallHandler(USE_CALLBACK(XMLSerializerConstructor)); |
| 1776 break; | 1781 break; |
| 1777 case V8ClassIndex::XMLHTTPREQUEST: { | 1782 case V8ClassIndex::XMLHTTPREQUEST: { |
| 1778 // Reserve one more internal field for keeping event listeners. | 1783 // Reserve one more internal field for keeping event listeners. |
| 1779 v8::Local<v8::ObjectTemplate> instance_template = | 1784 v8::Local<v8::ObjectTemplate> instance_template = |
| 1780 desc->InstanceTemplate(); | 1785 desc->InstanceTemplate(); |
| 1781 instance_template->SetInternalFieldCount( | 1786 instance_template->SetInternalFieldCount( |
| 1782 V8Custom::kXMLHttpRequestInternalFieldCount); | 1787 V8Custom::kXMLHttpRequestInternalFieldCount); |
| 1783 desc->SetCallHandler(USE_CALLBACK(XMLHttpRequestConstructor)); | 1788 desc->SetCallHandler(USE_CALLBACK(XMLHttpRequestConstructor)); |
| 1784 break; | 1789 break; |
| 1785 } | 1790 } |
| 1786 case V8ClassIndex::XMLHTTPREQUESTUPLOAD: { | 1791 case V8ClassIndex::XMLHTTPREQUESTUPLOAD: { |
| 1787 // Reserve one more internal field for keeping event listeners. | 1792 // Reserve one more internal field for keeping event listeners. |
| 1788 v8::Local<v8::ObjectTemplate> instance_template = | 1793 v8::Local<v8::ObjectTemplate> instance_template = |
| 1789 desc->InstanceTemplate(); | 1794 desc->InstanceTemplate(); |
| 1790 instance_template->SetInternalFieldCount( | 1795 instance_template->SetInternalFieldCount( |
| 1791 V8Custom::kXMLHttpRequestInternalFieldCount); | 1796 V8Custom::kXMLHttpRequestInternalFieldCount); |
| 1792 break; | 1797 break; |
| 1793 } | 1798 } |
| 1794 case V8ClassIndex::XPATHEVALUATOR: | 1799 case V8ClassIndex::XPATHEVALUATOR: |
| (...skipping 1663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3458 v8::Handle<v8::Function> frame_source_name; | 3463 v8::Handle<v8::Function> frame_source_name; |
| 3459 frame_source_name = v8::Local<v8::Function>::Cast( | 3464 frame_source_name = v8::Local<v8::Function>::Cast( |
| 3460 utility_context->Global()->Get(v8::String::New("frame_source_name"))); | 3465 utility_context->Global()->Get(v8::String::New("frame_source_name"))); |
| 3461 if (frame_source_name.IsEmpty()) { | 3466 if (frame_source_name.IsEmpty()) { |
| 3462 return String(); | 3467 return String(); |
| 3463 } | 3468 } |
| 3464 return ToWebCoreString(v8::Debug::Call(frame_source_name)); | 3469 return ToWebCoreString(v8::Debug::Call(frame_source_name)); |
| 3465 } | 3470 } |
| 3466 | 3471 |
| 3467 } // namespace WebCore | 3472 } // namespace WebCore |
| OLD | NEW |