diff options
-rw-r--r-- | DEPS | 2 | ||||
-rw-r--r-- | webkit/build/V8Bindings/SConscript | 1 | ||||
-rw-r--r-- | webkit/build/V8Bindings/V8Bindings.vcproj | 4 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_custom.cpp | 26 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_custom.h | 15 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_proxy.cpp | 27 | ||||
-rw-r--r-- | webkit/webkit.xcodeproj/project.pbxproj | 4 |
7 files changed, 52 insertions, 27 deletions
@@ -19,7 +19,7 @@ deps = { "http://googletest.googlecode.com/svn/trunk@167", "src/third_party/WebKit": - "/trunk/deps/third_party/WebKit@10527", + "/trunk/deps/third_party/WebKit@10557", "src/third_party/icu38": "/trunk/deps/third_party/icu38@10364", diff --git a/webkit/build/V8Bindings/SConscript b/webkit/build/V8Bindings/SConscript index 5fee005..7f5451a7 100644 --- a/webkit/build/V8Bindings/SConscript +++ b/webkit/build/V8Bindings/SConscript @@ -360,6 +360,7 @@ inputs = [ '$WEBCORE_DIR/bindings/v8/custom/V8HTMLPlugInElementCustom.cpp', '$WEBCORE_DIR/bindings/v8/custom/V8HTMLSelectElementCustom.cpp', '$WEBCORE_DIR/bindings/v8/custom/V8HTMLSelectElementCustom.h', + '$WEBCORE_DIR/bindings/v8/custom/V8LocationCustom.cpp', '$WEBCORE_DIR/bindings/v8/custom/V8NamedNodesCollection.cpp', '$WEBCORE_DIR/bindings/v8/custom/V8NamedNodesCollection.h', '$WEBCORE_DIR/bindings/v8/custom/V8SVGElementInstanceCustom.cpp', diff --git a/webkit/build/V8Bindings/V8Bindings.vcproj b/webkit/build/V8Bindings/V8Bindings.vcproj index 6a5615f..6b21b54 100644 --- a/webkit/build/V8Bindings/V8Bindings.vcproj +++ b/webkit/build/V8Bindings/V8Bindings.vcproj @@ -168,6 +168,10 @@ > </File> <File + RelativePath="..\..\..\third_party\WebKit\WebCore\bindings\v8\custom\V8LocationCustom.cpp" + > + </File> + <File RelativePath="..\..\..\third_party\WebKit\WebCore\bindings\v8\custom\V8NamedNodesCollection.cpp" > </File> diff --git a/webkit/port/bindings/v8/v8_custom.cpp b/webkit/port/bindings/v8/v8_custom.cpp index 86c2c01..6d05406 100644 --- a/webkit/port/bindings/v8/v8_custom.cpp +++ b/webkit/port/bindings/v8/v8_custom.cpp @@ -1639,16 +1639,7 @@ CALLBACK_FUNC_DECL(ElementSetAttributeNodeNS) { return V8Proxy::NodeToV8Object(result.get()); } -// Location -------------------------------------------------------------------- -CALLBACK_FUNC_DECL(LocationValueOf) { - // Just return the this object the way the normal valueOf function - // on the Object prototype would. The valueOf function is only - // added to make sure that it cannot be overwritten on location - // objects, since that would provide a hook to change the string - // conversion behavior of location objects. - return args.This(); -} // Attr ------------------------------------------------------------------------ @@ -2388,23 +2379,6 @@ NAMED_ACCESS_CHECK(History) { } -INDEXED_ACCESS_CHECK(Location) { - ASSERT(V8ClassIndex::FromInt(data->Int32Value()) == V8ClassIndex::LOCATION); - // Only allow same origin access - Location* imp = - V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, host); - return V8Proxy::CanAccessFrame(imp->frame(), false); -} - - -NAMED_ACCESS_CHECK(Location) { - ASSERT(V8ClassIndex::FromInt(data->Int32Value()) == V8ClassIndex::LOCATION); - // Only allow same origin access - Location* imp = - V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, host); - return V8Proxy::CanAccessFrame(imp->frame(), false); -} - #undef INDEXED_ACCESS_CHECK #undef NAMED_ACCESS_CHECK diff --git a/webkit/port/bindings/v8/v8_custom.h b/webkit/port/bindings/v8/v8_custom.h index a93c649..5ec3e98 100644 --- a/webkit/port/bindings/v8/v8_custom.h +++ b/webkit/port/bindings/v8/v8_custom.h @@ -338,6 +338,21 @@ DECLARE_CALLBACK(ElementSetAttributeNS) DECLARE_CALLBACK(ElementSetAttributeNodeNS) // Implementation of custom Location methods. +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationProtocol) +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationHost) +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationHostname) +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationPort) +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationPathname) +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationSearch) +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationHash) +DECLARE_PROPERTY_ACCESSOR_SETTER(LocationHref) +DECLARE_PROPERTY_ACCESSOR_GETTER(LocationAssign) +DECLARE_PROPERTY_ACCESSOR_GETTER(LocationReplace) +DECLARE_PROPERTY_ACCESSOR_GETTER(LocationReload) +DECLARE_CALLBACK(LocationAssign) +DECLARE_CALLBACK(LocationReplace) +DECLARE_CALLBACK(LocationReload) +DECLARE_CALLBACK(LocationToString) DECLARE_CALLBACK(LocationValueOf) // Implementation of EventTarget::addEventListener diff --git a/webkit/port/bindings/v8/v8_proxy.cpp b/webkit/port/bindings/v8/v8_proxy.cpp index 18101d6..010b2a6d 100644 --- a/webkit/port/bindings/v8/v8_proxy.cpp +++ b/webkit/port/bindings/v8/v8_proxy.cpp @@ -1760,6 +1760,33 @@ v8::Persistent<v8::FunctionTemplate> V8Proxy::GetTemplate( break; } case V8ClassIndex::LOCATION: { + // For security reasons, these functions are on the instance + // instead of on the prototype object to insure that they cannot + // be overwritten. + v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate(); + instance->SetAccessor( + v8::String::New("reload"), + V8Custom::v8LocationReloadAccessorGetter, + 0, + v8::Handle<v8::Value>(), + v8::ALL_CAN_READ, + static_cast<v8::PropertyAttribute>(v8::DontDelete|v8::ReadOnly)); + + instance->SetAccessor( + v8::String::New("replace"), + V8Custom::v8LocationReplaceAccessorGetter, + 0, + v8::Handle<v8::Value>(), + v8::ALL_CAN_READ, + static_cast<v8::PropertyAttribute>(v8::DontDelete|v8::ReadOnly)); + + instance->SetAccessor( + v8::String::New("assign"), + V8Custom::v8LocationAssignAccessorGetter, + 0, + v8::Handle<v8::Value>(), + v8::ALL_CAN_READ, + static_cast<v8::PropertyAttribute>(v8::DontDelete|v8::ReadOnly)); break; } case V8ClassIndex::HISTORY: { diff --git a/webkit/webkit.xcodeproj/project.pbxproj b/webkit/webkit.xcodeproj/project.pbxproj index 1e03a77..b8a6979 100644 --- a/webkit/webkit.xcodeproj/project.pbxproj +++ b/webkit/webkit.xcodeproj/project.pbxproj @@ -1373,6 +1373,7 @@ E4A238C70E3FA19C002BDE14 /* image_decoder.cc in Sources */ = {isa = PBXBuildFile; fileRef = E4A238C50E3FA19C002BDE14 /* image_decoder.cc */; }; E4E4C94A0E797648009A687C /* ImageSourceCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B5E8FBD0D7F3CC1001ECF42 /* ImageSourceCG.cpp */; }; E7CC722700DA5F7E55527582 /* resource_loader_bridge.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5D2A55FF5C399F9800256956 /* resource_loader_bridge.cc */; }; + E8AC24D9A18D0246326D9842 /* V8LocationCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7F1694059937550AA36C00F /* V8LocationCustom.cpp */; }; FBBBF2E4099C8EA9BDAF80F9 /* CurrentTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CCBDDEF91A55ACE86471036E /* CurrentTime.cpp */; }; /* End PBXBuildFile section */ @@ -4477,6 +4478,7 @@ E48A06D90E3F840F00172919 /* image_resource_fetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = image_resource_fetcher.h; sourceTree = "<group>"; }; E4A238C50E3FA19C002BDE14 /* image_decoder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = image_decoder.cc; sourceTree = "<group>"; }; E4A238C60E3FA19C002BDE14 /* image_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = image_decoder.h; sourceTree = "<group>"; }; + F7F1694059937550AA36C00F /* V8LocationCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = V8LocationCustom.cpp; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -4625,6 +4627,7 @@ 41DE7B6B0F40EA5F0049BC24 /* V8HTMLOptionsCollectionCustom.cpp */, 41DE7CA40F424BEE0049BC24 /* V8HTMLSelectElementCustom.h */, 41DE7C9F0F424AE80049BC24 /* V8HTMLSelectElementCustom.cpp */, + F7F1694059937550AA36C00F /* V8LocationCustom.cpp */, 41DE7CA20F424B020049BC24 /* V8NamedNodesCollection.cpp */, 41DE7CA10F424B020049BC24 /* V8NamedNodesCollection.h */, 41DE74890F3CDBCB0049BC24 /* V8SVGElementInstanceCustom.cpp */, @@ -9812,6 +9815,7 @@ 453FFDF935221CD484A3AFED /* Interval.cpp in Sources */, 3C9197C6A7DABB989CBDBF81 /* Playback.cpp in Sources */, E40060DB0EA69E0B0055B38E /* ScriptController.cpp in Sources */, + E8AC24D9A18D0246326D9842 /* V8LocationCustom.cpp in Sources */, 4DB7F55D0E9BD66300C66CE0 /* V8XMLHttpRequestCustom.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; |