[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
commit-queue at webkit.org
commit-queue at webkit.org
Wed Dec 22 12:59:57 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 07c7c9120f6c4f3d7162d13319e0084c4d59757e
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Sep 3 21:11:48 2010 +0000
2010-09-03 Dominic Cooney <dominicc at google.com>
Reviewed by Adam Barth.
Moves location.replace bindings logic into bindings/generic and
instantiates it for JSC and V8.
https://bugs.webkit.org/show_bug.cgi?id=44891
Covered by existing location.replace tests.
* GNUmakefile.am:
* WebCore.gypi:
* WebCore.pro:
* WebCore.vcproj/WebCore.vcproj:
* WebCore.xcodeproj/project.pbxproj:
* bindings/generic/BindingDOMWindow.h:
(WebCore::::createWindow):
(WebCore::::open):
* bindings/generic/BindingFrame.h: Added.
(WebCore::::navigateIfAllowed):
* bindings/generic/BindingLocation.h: Added.
(WebCore::::replace):
* bindings/generic/GenericBinding.h:
(WebCore::completeURL):
* bindings/js/JSBinding.h: Added.
* bindings/js/JSBindingsAllInOne.cpp:
* bindings/js/JSDOMBinding.cpp:
(WebCore::shouldAllowNavigation):
(WebCore::toLexicalFrame):
(WebCore::toDynamicFrame):
(WebCore::processingUserGesture):
(WebCore::completeURL):
* bindings/js/JSLocationCustom.cpp:
(WebCore::navigateIfAllowed):
(WebCore::JSLocation::replace):
* bindings/js/specialization/JSBindingState.cpp: Added.
(WebCore::::getActiveFrame):
(WebCore::::getFirstFrame):
(WebCore::::processingUserGesture):
(WebCore::::allowsAccessFromFrame):
* bindings/js/specialization/JSBindingState.h: Added.
* bindings/v8/V8Binding.h:
* bindings/v8/V8Utilities.cpp:
(WebCore::completeURL):
(WebCore::navigateIfAllowed):
* bindings/v8/custom/V8LocationCustom.cpp:
(WebCore::V8Location::replaceCallback):
* bindings/v8/specialization/V8BindingState.cpp:
(WebCore::::allowsAccessFromFrame):
* bindings/v8/specialization/V8BindingState.h:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@66770 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 52048c1..d9e6990 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,55 @@
+2010-09-03 Dominic Cooney <dominicc at google.com>
+
+ Reviewed by Adam Barth.
+
+ Moves location.replace bindings logic into bindings/generic and
+ instantiates it for JSC and V8.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44891
+
+ Covered by existing location.replace tests.
+
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/generic/BindingDOMWindow.h:
+ (WebCore::::createWindow):
+ (WebCore::::open):
+ * bindings/generic/BindingFrame.h: Added.
+ (WebCore::::navigateIfAllowed):
+ * bindings/generic/BindingLocation.h: Added.
+ (WebCore::::replace):
+ * bindings/generic/GenericBinding.h:
+ (WebCore::completeURL):
+ * bindings/js/JSBinding.h: Added.
+ * bindings/js/JSBindingsAllInOne.cpp:
+ * bindings/js/JSDOMBinding.cpp:
+ (WebCore::shouldAllowNavigation):
+ (WebCore::toLexicalFrame):
+ (WebCore::toDynamicFrame):
+ (WebCore::processingUserGesture):
+ (WebCore::completeURL):
+ * bindings/js/JSLocationCustom.cpp:
+ (WebCore::navigateIfAllowed):
+ (WebCore::JSLocation::replace):
+ * bindings/js/specialization/JSBindingState.cpp: Added.
+ (WebCore::::getActiveFrame):
+ (WebCore::::getFirstFrame):
+ (WebCore::::processingUserGesture):
+ (WebCore::::allowsAccessFromFrame):
+ * bindings/js/specialization/JSBindingState.h: Added.
+ * bindings/v8/V8Binding.h:
+ * bindings/v8/V8Utilities.cpp:
+ (WebCore::completeURL):
+ (WebCore::navigateIfAllowed):
+ * bindings/v8/custom/V8LocationCustom.cpp:
+ (WebCore::V8Location::replaceCallback):
+ * bindings/v8/specialization/V8BindingState.cpp:
+ (WebCore::::allowsAccessFromFrame):
+ * bindings/v8/specialization/V8BindingState.h:
+
2010-09-03 Dimitri Glazkov <dglazkov at chromium.org>
Reviewed by Tony Chang.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index d361810..53f7778 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -9,6 +9,7 @@ webcore_cppflags += \
-I$(srcdir)/WebCore/accessibility \
-I$(srcdir)/WebCore/bindings/generic \
-I$(srcdir)/WebCore/bindings/js \
+ -I$(srcdir)/WebCore/bindings/js/specialization \
-I$(srcdir)/WebCore/bindings/gobject \
-I$(srcdir)/WebCore/bridge \
-I$(srcdir)/WebCore/bridge/c \
@@ -623,6 +624,12 @@ webcore_sources += \
WebCore/accessibility/AccessibilityTableRow.h \
WebCore/bindings/generic/ActiveDOMCallback.cpp \
WebCore/bindings/generic/ActiveDOMCallback.h \
+ WebCore/bindings/generic/BindingFrame.h \
+ WebCore/bindings/generic/BindingLocation.h \
+ WebCore/bindings/generic/BindingSecurity.h \
+ WebCore/bindings/generic/BindingSecurityBase.cpp \
+ WebCore/bindings/generic/BindingSecurityBase.h \
+ WebCore/bindings/generic/GenericBinding.h \
WebCore/bindings/generic/RuntimeEnabledFeatures.cpp \
WebCore/bindings/generic/RuntimeEnabledFeatures.h \
WebCore/bindings/js/CachedScriptSourceProvider.h \
@@ -796,6 +803,8 @@ webcore_sources += \
WebCore/bindings/js/SerializedScriptValue.h \
WebCore/bindings/js/StringSourceProvider.h \
WebCore/bindings/js/WebCoreJSClientData.h \
+ WebCore/bindings/js/specialization/JSBindingState.cpp \
+ WebCore/bindings/js/specialization/JSBindingState.h \
WebCore/bindings/ScriptControllerBase.cpp \
WebCore/bindings/ScriptControllerBase.h \
WebCore/bridge/Bridge.h \
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index 99e891d..1412824 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -512,6 +512,8 @@
'bindings/generic/ActiveDOMCallback.cpp',
'bindings/generic/ActiveDOMCallback.h',
'bindings/generic/BindingDOMWindow.h',
+ 'bindings/generic/BindingFrame.h',
+ 'bindings/generic/BindingLocation.h',
'bindings/generic/BindingSecurity.h',
'bindings/generic/BindingSecurityBase.cpp',
'bindings/generic/BindingSecurityBase.h',
@@ -531,6 +533,7 @@
'bindings/js/JSAttrCustom.cpp',
'bindings/js/JSAudioConstructor.cpp',
'bindings/js/JSAudioConstructor.h',
+ 'bindings/js/JSBinding.h',
'bindings/js/JSCanvasRenderingContextCustom.cpp',
'bindings/js/JSCanvasRenderingContext2DCustom.cpp',
'bindings/js/JSCDATASectionCustom.cpp',
@@ -710,6 +713,8 @@
'bindings/js/WebCoreJSClientData.h',
'bindings/js/WorkerScriptController.cpp',
'bindings/js/WorkerScriptController.h',
+ 'bindings/js/specialization/JSBindingState.cpp',
+ 'bindings/js/specialization/JSBindingState.h',
'bindings/ScriptControllerBase.cpp',
'bindings/ScriptControllerBase.h',
'bindings/v8/ChildThreadDOMData.cpp',
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index 3f23cdd..8350892 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -184,6 +184,7 @@ WEBCORE_INCLUDEPATH = \
$$PWD/bindings \
$$PWD/bindings/generic \
$$PWD/bindings/js \
+ $$PWD/bindings/js/specialization \
$$PWD/bridge \
$$PWD/bridge/c \
$$PWD/bridge/jsc \
@@ -392,6 +393,7 @@ SOURCES += \
bindings/js/ScriptValue.cpp \
bindings/js/ScheduledAction.cpp \
bindings/js/SerializedScriptValue.cpp \
+ bindings/js/specialization/JSBindingState.cpp \
bindings/ScriptControllerBase.cpp \
bridge/IdentifierRep.cpp \
bridge/NP_jsobject.cpp \
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index f3e49f5..9ce3b1f 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -41967,6 +41967,30 @@
RelativePath="..\bindings\generic\ActiveDOMCallback.h"
>
</File>
+ <File
+ RelativePath="..\bindings\generic\BindingFrame.h"
+ >
+ </File>
+ <File
+ RelativePath="..\bindings\generic\BindingLocation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\bindings\generic\BindingSecurity.h"
+ >
+ </File>
+ <File
+ RelativePath="..\bindings\generic\BindingSecurityBase.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\bindings\generic\BindingSecurityBase.h"
+ >
+ </File>
+ <File
+ RelativePath="..\bindings\generic\GenericBinding.h"
+ >
+ </File>
</Filter>
<Filter
Name="generic"
@@ -42324,6 +42348,10 @@
>
</File>
<File
+ RelativePath="..\bindings\js\JSBinding.h"
+ >
+ </File>
+ <File
RelativePath="..\bindings\js\JSBindingsAllInOne.cpp"
>
</File>
@@ -49619,6 +49647,62 @@
RelativePath="..\bindings\js\WorkerScriptController.h"
>
</File>
+ <File
+ RelativePath="..\bindings\js\specialization\JSBindingState.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\bindings\js\specialization\JSBindingState.h"
+ >
+ </File>
</Filter>
</Filter>
<Filter
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index c8b88ec..db96ce2 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -2837,6 +2837,15 @@
A59E3C1F11580F510072928E /* KeyEventIPhone.mm in Sources */ = {isa = PBXBuildFile; fileRef = A59E3C1D11580F510072928E /* KeyEventIPhone.mm */; };
A5AFB34F115151A700B045CB /* StepRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5AFB34D115151A700B045CB /* StepRange.cpp */; };
A5AFB350115151A700B045CB /* StepRange.h in Headers */ = {isa = PBXBuildFile; fileRef = A5AFB34E115151A700B045CB /* StepRange.h */; };
+ A622A8EE122C442A00A785B3 /* JSBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8ED122C442A00A785B3 /* JSBinding.h */; };
+ A622A8F2122C444500A785B3 /* JSBindingState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A622A8F0122C444500A785B3 /* JSBindingState.cpp */; };
+ A622A8F3122C444500A785B3 /* JSBindingState.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8F1122C444500A785B3 /* JSBindingState.h */; };
+ A622A8FA122C44A600A785B3 /* BindingLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8F4122C44A600A785B3 /* BindingLocation.h */; };
+ A622A8FB122C44A600A785B3 /* BindingSecurity.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8F5122C44A600A785B3 /* BindingSecurity.h */; };
+ A622A8FC122C44A600A785B3 /* BindingSecurityBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A622A8F6122C44A600A785B3 /* BindingSecurityBase.cpp */; };
+ A622A8FD122C44A600A785B3 /* BindingSecurityBase.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8F7122C44A600A785B3 /* BindingSecurityBase.h */; };
+ A622A8FE122C44A600A785B3 /* BindingUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8F8122C44A600A785B3 /* BindingUtilities.h */; };
+ A622A8FF122C44A600A785B3 /* GenericBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8F9122C44A600A785B3 /* GenericBinding.h */; };
A718760E0B2A120100A16ECE /* DragActions.h in Headers */ = {isa = PBXBuildFile; fileRef = A718760D0B2A120100A16ECE /* DragActions.h */; settings = {ATTRIBUTES = (Private, ); }; };
A71878900B2D04AC00A16ECE /* DragControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = A718788F0B2D04AC00A16ECE /* DragControllerMac.mm */; };
A7352C190B1BB89D00A986D0 /* RenderSVGBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7352C170B1BB89D00A986D0 /* RenderSVGBlock.cpp */; };
@@ -8707,6 +8716,15 @@
A5AFB34E115151A700B045CB /* StepRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StepRange.h; sourceTree = "<group>"; };
A5C974CF11485FF10066F2AB /* KeyEventCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KeyEventCocoa.h; path = cocoa/KeyEventCocoa.h; sourceTree = "<group>"; };
A5C974D011485FF10066F2AB /* KeyEventCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = KeyEventCocoa.mm; path = cocoa/KeyEventCocoa.mm; sourceTree = "<group>"; };
+ A622A8ED122C442A00A785B3 /* JSBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBinding.h; sourceTree = "<group>"; };
+ A622A8F0122C444500A785B3 /* JSBindingState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSBindingState.cpp; sourceTree = "<group>"; };
+ A622A8F1122C444500A785B3 /* JSBindingState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBindingState.h; sourceTree = "<group>"; };
+ A622A8F4122C44A600A785B3 /* BindingLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BindingLocation.h; path = generic/BindingLocation.h; sourceTree = "<group>"; };
+ A622A8F5122C44A600A785B3 /* BindingSecurity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BindingSecurity.h; path = generic/BindingSecurity.h; sourceTree = "<group>"; };
+ A622A8F6122C44A600A785B3 /* BindingSecurityBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BindingSecurityBase.cpp; path = generic/BindingSecurityBase.cpp; sourceTree = "<group>"; };
+ A622A8F7122C44A600A785B3 /* BindingSecurityBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BindingSecurityBase.h; path = generic/BindingSecurityBase.h; sourceTree = "<group>"; };
+ A622A8F8122C44A600A785B3 /* BindingUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BindingUtilities.h; path = generic/BindingUtilities.h; sourceTree = "<group>"; };
+ A622A8F9122C44A600A785B3 /* GenericBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GenericBinding.h; path = generic/GenericBinding.h; sourceTree = "<group>"; };
A718760D0B2A120100A16ECE /* DragActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragActions.h; sourceTree = "<group>"; };
A718788F0B2D04AC00A16ECE /* DragControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DragControllerMac.mm; sourceTree = "<group>"; };
A71A70C911AFB02000989D6D /* HTMLMeterElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLMeterElement.idl; sourceTree = "<group>"; };
@@ -14452,6 +14470,15 @@
name = cocoa;
sourceTree = "<group>";
};
+ A622A8EF122C444500A785B3 /* specialization */ = {
+ isa = PBXGroup;
+ children = (
+ A622A8F0122C444500A785B3 /* JSBindingState.cpp */,
+ A622A8F1122C444500A785B3 /* JSBindingState.h */,
+ );
+ path = specialization;
+ sourceTree = "<group>";
+ };
A75E8B7F0E1DE2B0007F2481 /* filters */ = {
isa = PBXGroup;
children = (
@@ -16069,6 +16096,12 @@
children = (
B5D31DF811CF610B009F22B4 /* ActiveDOMCallback.cpp */,
B5D31DF911CF610B009F22B4 /* ActiveDOMCallback.h */,
+ A622A8F4122C44A600A785B3 /* BindingLocation.h */,
+ A622A8F5122C44A600A785B3 /* BindingSecurity.h */,
+ A622A8F6122C44A600A785B3 /* BindingSecurityBase.cpp */,
+ A622A8F7122C44A600A785B3 /* BindingSecurityBase.h */,
+ A622A8F8122C44A600A785B3 /* BindingUtilities.h */,
+ A622A8F9122C44A600A785B3 /* GenericBinding.h */,
);
name = generic;
sourceTree = "<group>";
@@ -16108,6 +16141,7 @@
BCCE58A71061E82F008FB35A /* Callback Objects */,
BCCE58B41061E925008FB35A /* Constructors */,
BC4EDEF70C08F414007EDD49 /* Custom */,
+ A622A8EF122C444500A785B3 /* specialization */,
14DFB33F0A7DF7630018F769 /* Derived Sources */,
BCD533630ED6848900887468 /* CachedScriptSourceProvider.h */,
93F8B3060A300FEA00F61AB8 /* CodeGeneratorJS.pm */,
@@ -16121,6 +16155,7 @@
C585A66111D4FAC5004C3E4B /* IDBBindingUtilities.h */,
1C81BA030E97348300266E07 /* JavaScriptCallFrame.cpp */,
1C81BA040E97348300266E07 /* JavaScriptCallFrame.h */,
+ A622A8ED122C442A00A785B3 /* JSBinding.h */,
BC53DAC411432FD9000D817E /* JSDebugWrapperSet.cpp */,
BC53DAC111432EEE000D817E /* JSDebugWrapperSet.h */,
93B70D4709EB0C7C009D8468 /* JSDOMBinding.cpp */,
@@ -20432,6 +20467,13 @@
898785B9122CA2A7003AABDA /* JSMetadataCallback.h in Headers */,
898785F1122E1E87003AABDA /* JSFileException.h in Headers */,
898785F5122E1EAC003AABDA /* JSFileReaderSync.h in Headers */,
+ A622A8EE122C442A00A785B3 /* JSBinding.h in Headers */,
+ A622A8F3122C444500A785B3 /* JSBindingState.h in Headers */,
+ A622A8FA122C44A600A785B3 /* BindingLocation.h in Headers */,
+ A622A8FB122C44A600A785B3 /* BindingSecurity.h in Headers */,
+ A622A8FD122C44A600A785B3 /* BindingSecurityBase.h in Headers */,
+ A622A8FE122C44A600A785B3 /* BindingUtilities.h in Headers */,
+ A622A8FF122C44A600A785B3 /* GenericBinding.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -22895,6 +22937,8 @@
898785B8122CA2A7003AABDA /* JSMetadataCallback.cpp in Sources */,
898785F0122E1E87003AABDA /* JSFileException.cpp in Sources */,
898785F4122E1EAC003AABDA /* JSFileReaderSync.cpp in Sources */,
+ A622A8F2122C444500A785B3 /* JSBindingState.cpp in Sources */,
+ A622A8FC122C44A600A785B3 /* BindingSecurityBase.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/WebCore/bindings/generic/BindingDOMWindow.h b/WebCore/bindings/generic/BindingDOMWindow.h
index 0c450a5..96b8b9d 100644
--- a/WebCore/bindings/generic/BindingDOMWindow.h
+++ b/WebCore/bindings/generic/BindingDOMWindow.h
@@ -65,9 +65,6 @@ public:
const String& frameName,
const WindowFeatures& rawFeatures);
- // FIXME: There should be a place for generic binding utilities.
- static KURL completeURL(State<Binding>*, const String& relativeURL);
-
private:
// Horizontal and vertical offset, from the parent content area,
// around newly opened popups that don't specify a location.
@@ -268,18 +265,6 @@ WebCore::DOMWindow* BindingDOMWindow<Binding>::open(State<Binding>* state,
return frame->domWindow();
}
-template <class Binding>
-KURL BindingDOMWindow<Binding>::completeURL(State<Binding>* state,
- const String& relativeURL)
-{
- // For historical reasons, we need to complete the URL using the
- // dynamic frame.
- Frame* frame = state->getFirstFrame();
- if (!frame)
- return KURL();
- return frame->loader()->completeURL(relativeURL);
-}
-
} // namespace WebCore
#endif // BindingDOMWindow_h
diff --git a/WebCore/bindings/generic/BindingFrame.h b/WebCore/bindings/generic/BindingFrame.h
new file mode 100644
index 0000000..f1fdc79
--- /dev/null
+++ b/WebCore/bindings/generic/BindingFrame.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef BindingFrame_h
+#define BindingFrame_h
+
+#include "Frame.h"
+#include "GenericBinding.h"
+
+namespace WebCore {
+
+template <class Binding>
+class BindingFrame {
+public:
+ static void navigateIfAllowed(State<Binding>*, Frame*, const KURL&, bool lockHistory, bool lockBackForwardList);
+};
+
+template <class Binding>
+void BindingFrame<Binding>::navigateIfAllowed(State<Binding>* state, Frame* frame, const KURL& url, bool lockHistory, bool lockBackForwardList)
+{
+ Frame* activeFrame = state->getActiveFrame();
+ if (!activeFrame)
+ return;
+ if (!protocolIsJavaScript(url) || state->allowsAccessFromFrame(frame))
+ frame->redirectScheduler()->scheduleLocationChange(url.string(), activeFrame->loader()->outgoingReferrer(), lockHistory, lockBackForwardList, state->processingUserGesture());
+}
+
+} // namespace WebCore
+
+#endif // BindingFrame_h
diff --git a/WebCore/bindings/generic/BindingLocation.h b/WebCore/bindings/generic/BindingLocation.h
new file mode 100644
index 0000000..ca52814
--- /dev/null
+++ b/WebCore/bindings/generic/BindingLocation.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef BindingLocation_h
+#define BindingLocation_h
+
+#include "BindingSecurity.h"
+#include "GenericBinding.h"
+#include "Location.h"
+
+namespace WebCore {
+
+template <class Binding>
+class BindingLocation {
+public:
+ static void replace(State<Binding>*, Location*, const String& url);
+};
+
+template <class Binding>
+void BindingLocation<Binding>::replace(State<Binding>* state, Location* location, const String& url)
+{
+ Frame* frame = location->frame();
+ if (!frame)
+ return;
+
+ KURL fullURL = completeURL(state, url);
+ if (fullURL.isNull())
+ return;
+
+ if (!BindingSecurity<Binding>::shouldAllowNavigation(state, frame))
+ return;
+
+ Binding::Frame::navigateIfAllowed(state, frame, fullURL, true, true);
+}
+
+} // namespace WebCore
+
+#endif // BindingLocation_h
diff --git a/WebCore/bindings/generic/GenericBinding.h b/WebCore/bindings/generic/GenericBinding.h
index d030b45..8bf1343 100644
--- a/WebCore/bindings/generic/GenericBinding.h
+++ b/WebCore/bindings/generic/GenericBinding.h
@@ -31,6 +31,9 @@
#ifndef GenericBinding_h
#define GenericBinding_h
+#include "Frame.h"
+#include "FrameLoader.h"
+
namespace WebCore {
// Used to instantiate binding templates for any methods shared among all
@@ -47,6 +50,17 @@ class State<GenericBinding> {
// Any methods shared across bindings can go here.
};
+template <class Binding>
+KURL completeURL(State<Binding>* state, const String& relativeURL)
+{
+ // For historical reasons, we need to complete the URL using the
+ // dynamic frame.
+ Frame* frame = state->getFirstFrame();
+ if (!frame)
+ return KURL();
+ return frame->loader()->completeURL(relativeURL);
+}
+
}
#endif // GenericBinding_h
diff --git a/WebCore/bindings/js/JSBinding.h b/WebCore/bindings/js/JSBinding.h
new file mode 100644
index 0000000..b42c9be
--- /dev/null
+++ b/WebCore/bindings/js/JSBinding.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef JSBinding_h
+#define JSBinding_h
+
+#include "BindingFrame.h"
+#include "BindingLocation.h"
+#include "BindingSecurity.h"
+
+namespace WebCore {
+
+// Instantiate binding template classes for JSC.
+class JSBinding {
+public:
+ typedef BindingFrame<JSBinding> Frame;
+ typedef BindingLocation<JSBinding> Location;
+};
+
+typedef BindingSecurity<JSBinding> JSBindingSecurity;
+
+} // namespace WebCore
+
+#endif // JSBinding_h
diff --git a/WebCore/bindings/js/JSBindingsAllInOne.cpp b/WebCore/bindings/js/JSBindingsAllInOne.cpp
index 922e449..6e1cc1e 100644
--- a/WebCore/bindings/js/JSBindingsAllInOne.cpp
+++ b/WebCore/bindings/js/JSBindingsAllInOne.cpp
@@ -30,6 +30,7 @@
#include "GCController.cpp"
#include "JSAttrCustom.cpp"
#include "JSAudioConstructor.cpp"
+#include "JSBindingState.cpp"
#include "JSCDATASectionCustom.cpp"
#include "JSCSSRuleCustom.cpp"
#include "JSCSSRuleListCustom.cpp"
diff --git a/WebCore/bindings/js/JSDOMBinding.cpp b/WebCore/bindings/js/JSDOMBinding.cpp
index 96394eb..74c8131 100644
--- a/WebCore/bindings/js/JSDOMBinding.cpp
+++ b/WebCore/bindings/js/JSDOMBinding.cpp
@@ -38,11 +38,14 @@
#include "HTMLImageElement.h"
#include "HTMLNames.h"
#include "HTMLScriptElement.h"
+#include "JSBinding.h"
+#include "JSBindingState.h"
#include "JSDOMCoreException.h"
#include "JSDOMWindowCustom.h"
#include "JSDebugWrapperSet.h"
#include "JSEventException.h"
#include "JSExceptionBase.h"
+#include "JSMainThreadExecState.h"
#include "JSNode.h"
#include "JSRangeException.h"
#include "JSXMLHttpRequestException.h"
@@ -639,8 +642,8 @@ bool allowsAccessFromFrame(ExecState* exec, Frame* frame, String& message)
bool shouldAllowNavigation(ExecState* exec, Frame* frame)
{
- Frame* lexicalFrame = toLexicalFrame(exec);
- return lexicalFrame && lexicalFrame->loader()->shouldAllowNavigation(frame);
+ JSBindingState state(exec);
+ return JSBindingSecurity::shouldAllowNavigation(&state, frame);
}
bool allowSettingSrcToJavascriptURL(ExecState* exec, Element* element, const String& name, const String& value)
@@ -671,26 +674,23 @@ void printErrorMessageForFrame(Frame* frame, const String& message)
Frame* toLexicalFrame(ExecState* exec)
{
- return asJSDOMWindow(exec->lexicalGlobalObject())->impl()->frame();
+ return JSBindingState(exec).getActiveFrame();
}
Frame* toDynamicFrame(ExecState* exec)
{
- return asJSDOMWindow(exec->dynamicGlobalObject())->impl()->frame();
+ return JSBindingState(exec).getFirstFrame();
}
bool processingUserGesture()
{
- return ScriptController::processingUserGesture();
+ return JSBindingState(JSMainThreadExecState::currentState()).processingUserGesture();
}
KURL completeURL(ExecState* exec, const String& relativeURL)
{
- // For historical reasons, we need to complete the URL using the dynamic frame.
- Frame* frame = toDynamicFrame(exec);
- if (!frame)
- return KURL();
- return frame->loader()->completeURL(relativeURL);
+ JSBindingState state(exec);
+ return completeURL(&state, relativeURL);
}
JSValue objectToStringFunctionGetter(ExecState* exec, JSValue, const Identifier& propertyName)
diff --git a/WebCore/bindings/js/JSLocationCustom.cpp b/WebCore/bindings/js/JSLocationCustom.cpp
index 99166cd..09e7294 100644
--- a/WebCore/bindings/js/JSLocationCustom.cpp
+++ b/WebCore/bindings/js/JSLocationCustom.cpp
@@ -27,6 +27,8 @@
#include "ExceptionCode.h"
#include "Frame.h"
#include "FrameLoader.h"
+#include "JSBinding.h"
+#include "JSBindingState.h"
#include "JSDOMBinding.h"
#include "JSDOMWindowCustom.h"
#include "KURL.h"
@@ -186,12 +188,8 @@ void JSLocation::defineGetter(ExecState* exec, const Identifier& propertyName, J
static void navigateIfAllowed(ExecState* exec, Frame* frame, const KURL& url, bool lockHistory, bool lockBackForwardList)
{
- Frame* lexicalFrame = toLexicalFrame(exec);
- if (!lexicalFrame)
- return;
-
- if (!protocolIsJavaScript(url) || allowsAccessFromFrame(exec, frame))
- frame->redirectScheduler()->scheduleLocationChange(url.string(), lexicalFrame->loader()->outgoingReferrer(), lockHistory, lockBackForwardList, processingUserGesture());
+ JSBindingState state(exec);
+ JSBinding::Frame::navigateIfAllowed(&state, frame, url, lockHistory, lockBackForwardList);
}
void JSLocation::setHref(ExecState* exec, JSValue value)
@@ -303,18 +301,8 @@ void JSLocation::setHash(ExecState* exec, JSValue value)
JSValue JSLocation::replace(ExecState* exec)
{
- Frame* frame = impl()->frame();
- if (!frame)
- return jsUndefined();
-
- KURL url = completeURL(exec, ustringToString(exec->argument(0).toString(exec)));
- if (url.isNull())
- return jsUndefined();
-
- if (!shouldAllowNavigation(exec, frame))
- return jsUndefined();
-
- navigateIfAllowed(exec, frame, url, true, true);
+ JSBindingState state(exec);
+ JSBinding::Location::replace(&state, impl(), ustringToString(exec->argument(0).toString(exec)));
return jsUndefined();
}
diff --git a/WebCore/bindings/js/specialization/JSBindingState.cpp b/WebCore/bindings/js/specialization/JSBindingState.cpp
new file mode 100644
index 0000000..950b813
--- /dev/null
+++ b/WebCore/bindings/js/specialization/JSBindingState.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "JSBindingState.h"
+
+#include "DOMWindow.h"
+#include "JSDOMWindow.h"
+#include "JSDOMWindowCustom.h"
+#include "ScriptController.h"
+
+namespace WebCore {
+
+class Frame;
+
+Frame* State<JSBinding>::getActiveFrame()
+{
+ return asJSDOMWindow(m_exec->lexicalGlobalObject())->impl()->frame();
+}
+
+Frame* State<JSBinding>::getFirstFrame()
+{
+ return asJSDOMWindow(m_exec->dynamicGlobalObject())->impl()->frame();
+}
+
+bool State<JSBinding>::processingUserGesture()
+{
+ return ScriptController::processingUserGesture();
+}
+
+bool State<JSBinding>::allowsAccessFromFrame(Frame* frame)
+{
+ return WebCore::allowsAccessFromFrame(m_exec, frame);
+}
+
+} // namespace WebCore
diff --git a/WebCore/bindings/js/specialization/JSBindingState.h b/WebCore/bindings/js/specialization/JSBindingState.h
new file mode 100644
index 0000000..6640140
--- /dev/null
+++ b/WebCore/bindings/js/specialization/JSBindingState.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef JSBindingState_h
+#define JSBindingState_h
+
+#include "GenericBinding.h"
+#include "JSBinding.h"
+
+namespace JSC {
+
+class ExecState;
+
+} // namespace JSC
+
+namespace WebCore {
+
+class Frame;
+
+template <>
+class State<JSBinding> : public State<GenericBinding> {
+public:
+ explicit State(JSC::ExecState* exec)
+ : m_exec(exec)
+ {
+ }
+
+ virtual ~State()
+ {
+ }
+
+ Frame* getActiveFrame();
+ Frame* getFirstFrame();
+
+ bool processingUserGesture();
+
+ // FIXME: This should be shared in BindingSecurity
+ bool allowsAccessFromFrame(Frame*);
+
+private:
+ JSC::ExecState* m_exec;
+};
+
+typedef State<JSBinding> JSBindingState;
+
+} // namespace WebCore
+
+#endif // JSBindingState_h
diff --git a/WebCore/bindings/v8/V8Binding.h b/WebCore/bindings/v8/V8Binding.h
index 58989ed..566e8ac 100644
--- a/WebCore/bindings/v8/V8Binding.h
+++ b/WebCore/bindings/v8/V8Binding.h
@@ -31,6 +31,8 @@
#ifndef V8Binding_h
#define V8Binding_h
+#include "BindingFrame.h"
+#include "BindingLocation.h"
#include "BindingSecurity.h"
#include "MathExtras.h"
#include "PlatformString.h"
@@ -50,16 +52,18 @@ namespace WebCore {
public:
typedef v8::Handle<v8::Value> Value;
typedef V8BindingDOMWindow DOMWindow;
+ typedef BindingFrame<V8Binding> Frame;
+ typedef BindingLocation<V8Binding> Location;
static Value emptyScriptValue() { return v8::Local<v8::Value>(); }
};
typedef BindingSecurity<V8Binding> V8BindingSecurity;
-
+
enum ExternalMode {
Externalize,
DoNotExternalize
};
-
+
template <typename StringType>
StringType v8StringToWebCoreString(v8::Handle<v8::String> v8String, ExternalMode external);
diff --git a/WebCore/bindings/v8/V8Utilities.cpp b/WebCore/bindings/v8/V8Utilities.cpp
index 2e5cf8b..e497071 100644
--- a/WebCore/bindings/v8/V8Utilities.cpp
+++ b/WebCore/bindings/v8/V8Utilities.cpp
@@ -38,7 +38,6 @@
#include "ScriptExecutionContext.h"
#include "ScriptState.h"
#include "V8Binding.h"
-#include "V8BindingDOMWindow.h" // FIXME: remove when completeURL moves
#include "V8BindingState.h"
#include "V8Proxy.h"
#include "WorkerContext.h"
@@ -112,16 +111,12 @@ bool shouldAllowNavigation(Frame* frame)
KURL completeURL(const String& relativeURL)
{
- return V8BindingDOMWindow::completeURL(V8BindingState::Only(), relativeURL);
+ return completeURL(V8BindingState::Only(), relativeURL);
}
void navigateIfAllowed(Frame* frame, const KURL& url, bool lockHistory, bool lockBackForwardList)
{
- Frame* callingOrEntered = callingOrEnteredFrame();
- if (!callingOrEntered)
- return;
- if (!protocolIsJavaScript(url) || ScriptController::isSafeScript(frame))
- frame->redirectScheduler()->scheduleLocationChange(url.string(), callingOrEntered->loader()->outgoingReferrer(), lockHistory, lockBackForwardList, processingUserGesture());
+ return V8Binding::Frame::navigateIfAllowed(V8BindingState::Only(), frame, url, lockHistory, lockBackForwardList);
}
ScriptExecutionContext* getScriptExecutionContext()
diff --git a/WebCore/bindings/v8/custom/V8LocationCustom.cpp b/WebCore/bindings/v8/custom/V8LocationCustom.cpp
index ac305c9..6068aa2 100644
--- a/WebCore/bindings/v8/custom/V8LocationCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8LocationCustom.cpp
@@ -292,19 +292,7 @@ v8::Handle<v8::Value> V8Location::replaceCallback(const v8::Arguments& args)
INC_STATS("DOM.Location.replace");
v8::Handle<v8::Object> holder = args.Holder();
Location* imp = V8Location::toNative(holder);
-
- Frame* frame = imp->frame();
- if (!frame)
- return v8::Undefined();
-
- KURL url = completeURL(toWebCoreString(args[0]));
- if (url.isNull())
- return v8::Undefined();
-
- if (!shouldAllowNavigation(frame))
- return v8::Undefined();
-
- navigateIfAllowed(frame, url, true, true);
+ V8Binding::Location::replace(V8BindingState::Only(), imp, toWebCoreString(args[0]));
return v8::Undefined();
}
@@ -378,4 +366,3 @@ v8::Handle<v8::Value> toV8(Location* impl)
}
} // namespace WebCore
-
diff --git a/WebCore/bindings/v8/specialization/V8BindingState.cpp b/WebCore/bindings/v8/specialization/V8BindingState.cpp
index ccdd7c8..2193c9f 100644
--- a/WebCore/bindings/v8/specialization/V8BindingState.cpp
+++ b/WebCore/bindings/v8/specialization/V8BindingState.cpp
@@ -84,4 +84,9 @@ bool State<V8Binding>::processingUserGesture()
return ScriptController::processingUserGesture();
}
+bool State<V8Binding>::allowsAccessFromFrame(Frame* frame)
+{
+ return ScriptController::isSafeScript(frame);
+}
+
} // namespace WebCore
diff --git a/WebCore/bindings/v8/specialization/V8BindingState.h b/WebCore/bindings/v8/specialization/V8BindingState.h
index baba0c6..14305b8 100644
--- a/WebCore/bindings/v8/specialization/V8BindingState.h
+++ b/WebCore/bindings/v8/specialization/V8BindingState.h
@@ -60,6 +60,9 @@ public:
bool processingUserGesture();
+ // FIXME: This should be shared in BindingSecurity
+ bool allowsAccessFromFrame(Frame*);
+
private:
explicit State() {}
~State();
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list