summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authortkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-09 05:10:22 +0000
committertkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-09 05:10:22 +0000
commit65b95cd72cea12a94439e8ef3cab0a0962e4aa3c (patch)
tree6da1730476a51c9346bb89fd3d8599c511056c6b /webkit
parentaef03130359ef824153b4ed088622460bbccdb0f (diff)
downloadchromium_src-65b95cd72cea12a94439e8ef3cab0a0962e4aa3c.zip
chromium_src-65b95cd72cea12a94439e8ef3cab0a0962e4aa3c.tar.gz
chromium_src-65b95cd72cea12a94439e8ef3cab0a0962e4aa3c.tar.bz2
Print the element path in TestWebViewDelegate::decidePolicyForNavigation()
to follow WebKit r42740. - Add a WebNode parameter to WebViewDelegate::decidePolicyForNavigation() TestWebViewDelegate prints the path of the node. RenderView ignores this parameter. - Fix a bug of WebNode assignment. BUG=11000 TEST=This change enables 3 layout tests. Review URL: http://codereview.chromium.org/267003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28527 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/api/public/WebFrameClient.h2
-rw-r--r--webkit/api/src/WebNode.cpp181
-rw-r--r--webkit/glue/empty_webframeclient.h2
-rw-r--r--webkit/glue/webframeloaderclient_impl.cc20
-rw-r--r--webkit/tools/layout_tests/test_expectations.txt10
-rw-r--r--webkit/tools/test_shell/test_webview_delegate.cc14
-rw-r--r--webkit/tools/test_shell/test_webview_delegate.h4
7 files changed, 127 insertions, 106 deletions
diff --git a/webkit/api/public/WebFrameClient.h b/webkit/api/public/WebFrameClient.h
index 24701e5..82f9eed 100644
--- a/webkit/api/public/WebFrameClient.h
+++ b/webkit/api/public/WebFrameClient.h
@@ -41,6 +41,7 @@ namespace WebKit {
class WebFrame;
class WebMediaPlayer;
class WebMediaPlayerClient;
+ class WebNode;
class WebPlugin;
class WebSecurityOrigin;
class WebString;
@@ -87,6 +88,7 @@ namespace WebKit {
// defaultPolicy should just be returned.
virtual WebNavigationPolicy decidePolicyForNavigation(
WebFrame*, const WebURLRequest&, WebNavigationType,
+ const WebNode& originatingNode,
WebNavigationPolicy defaultPolicy, bool isRedirect) = 0;
diff --git a/webkit/api/src/WebNode.cpp b/webkit/api/src/WebNode.cpp
index af187b6..44a930d 100644
--- a/webkit/api/src/WebNode.cpp
+++ b/webkit/api/src/WebNode.cpp
@@ -1,90 +1,91 @@
-/*
- * Copyright (C) 2009 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 "WebNode.h"
-
-#include "Node.h"
-#include <wtf/PassRefPtr.h>
-
-using namespace WebCore;
-
-namespace WebKit {
-
-class WebNodePrivate : public Node {
-};
-
-void WebNode::reset()
-{
- assign(0);
-}
-
-void WebNode::assign(const WebNode& other)
-{
- WebNodePrivate* p = const_cast<WebNodePrivate*>(other.m_private);
- p->ref();
- assign(p);
-}
-
-WebNode WebNode::parentNode() const
-{
- return PassRefPtr<Node>(const_cast<Node*>(m_private->parentNode()));
-}
-
-WebString WebNode::nodeName() const
-{
- return m_private->nodeName();
-}
-
-WebNode::WebNode(const WTF::PassRefPtr<WebCore::Node>& node)
- : m_private(static_cast<WebNodePrivate*>(node.releaseRef()))
-{
-}
-
-WebNode& WebNode::operator=(const WTF::PassRefPtr<WebCore::Node>& node)
-{
- assign(static_cast<WebNodePrivate*>(node.releaseRef()));
- return *this;
-}
-
-WebNode::operator WTF::PassRefPtr<WebCore::Node>() const
-{
- return PassRefPtr<Node>(const_cast<WebNodePrivate*>(m_private));
-}
-
-void WebNode::assign(WebNodePrivate* p)
-{
- // p is already ref'd for us by the caller
- if (m_private)
- m_private->deref();
- m_private = p;
-}
-
-} // namespace WebKit
+/*
+ * Copyright (C) 2009 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 "WebNode.h"
+
+#include "Node.h"
+#include <wtf/PassRefPtr.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+class WebNodePrivate : public Node {
+};
+
+void WebNode::reset()
+{
+ assign(0);
+}
+
+void WebNode::assign(const WebNode& other)
+{
+ WebNodePrivate* p = const_cast<WebNodePrivate*>(other.m_private);
+ if (p)
+ p->ref();
+ assign(p);
+}
+
+WebNode WebNode::parentNode() const
+{
+ return PassRefPtr<Node>(const_cast<Node*>(m_private->parentNode()));
+}
+
+WebString WebNode::nodeName() const
+{
+ return m_private->nodeName();
+}
+
+WebNode::WebNode(const WTF::PassRefPtr<WebCore::Node>& node)
+ : m_private(static_cast<WebNodePrivate*>(node.releaseRef()))
+{
+}
+
+WebNode& WebNode::operator=(const WTF::PassRefPtr<WebCore::Node>& node)
+{
+ assign(static_cast<WebNodePrivate*>(node.releaseRef()));
+ return *this;
+}
+
+WebNode::operator WTF::PassRefPtr<WebCore::Node>() const
+{
+ return PassRefPtr<Node>(const_cast<WebNodePrivate*>(m_private));
+}
+
+void WebNode::assign(WebNodePrivate* p)
+{
+ // p is already ref'd for us by the caller
+ if (m_private)
+ m_private->deref();
+ m_private = p;
+}
+
+} // namespace WebKit
diff --git a/webkit/glue/empty_webframeclient.h b/webkit/glue/empty_webframeclient.h
index b36f91b..62a52c0 100644
--- a/webkit/glue/empty_webframeclient.h
+++ b/webkit/glue/empty_webframeclient.h
@@ -27,7 +27,7 @@ class EmptyWebFrameClient : public WebKit::WebFrameClient {
WebKit::WebNavigationPolicy policy) {}
virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
WebKit::WebFrame* frame, const WebKit::WebURLRequest& request,
- WebKit::WebNavigationType type,
+ WebKit::WebNavigationType type, const WebKit::WebNode& originating_node,
WebKit::WebNavigationPolicy default_policy, bool is_redirect) {
return default_policy; }
virtual void willSubmitForm(WebKit::WebFrame* frame,
diff --git a/webkit/glue/webframeloaderclient_impl.cc b/webkit/glue/webframeloaderclient_impl.cc
index 8ee9f7c..0841657 100644
--- a/webkit/glue/webframeloaderclient_impl.cc
+++ b/webkit/glue/webframeloaderclient_impl.cc
@@ -17,6 +17,7 @@
#include "FormState.h"
#include "FrameLoader.h"
#include "FrameLoadRequest.h"
+#include "HitTestResult.h"
#include "MIMETypeRegistry.h"
#include "MouseEvent.h"
#include "Page.h"
@@ -33,6 +34,7 @@
#include "net/base/net_errors.h"
#include "webkit/api/public/WebForm.h"
#include "webkit/api/public/WebFrameClient.h"
+#include "webkit/api/public/WebNode.h"
#include "webkit/api/public/WebPlugin.h"
#include "webkit/api/public/WebPluginParams.h"
#include "webkit/api/public/WebSecurityOrigin.h"
@@ -62,6 +64,7 @@ using WebKit::WebData;
using WebKit::WebDataSourceImpl;
using WebKit::WebNavigationType;
using WebKit::WebNavigationPolicy;
+using WebKit::WebNode;
using WebKit::WebPlugin;
using WebKit::WebPluginContainerImpl;
using WebKit::WebPluginLoadObserver;
@@ -816,9 +819,22 @@ void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(
WebNavigationType webnav_type =
WebDataSourceImpl::toWebNavigationType(action.type());
+ RefPtr<WebCore::Node> node;
+ for (const Event* event = action.event(); event;
+ event = event->underlyingEvent()) {
+ if (event->isMouseEvent()) {
+ const MouseEvent* mouse_event =
+ static_cast<const MouseEvent*>(event);
+ node = webframe_->frame()->eventHandler()->hitTestResultAtPoint(
+ mouse_event->absoluteLocation(), false).innerNonSharedNode();
+ break;
+ }
+ }
+ WebNode originating_node = webkit_glue::NodeToWebNode(node);
+
navigation_policy = webframe_->client()->decidePolicyForNavigation(
- webframe_, ds->request(), webnav_type, navigation_policy,
- is_redirect);
+ webframe_, ds->request(), webnav_type, originating_node,
+ navigation_policy, is_redirect);
}
}
diff --git a/webkit/tools/layout_tests/test_expectations.txt b/webkit/tools/layout_tests/test_expectations.txt
index 4f30868..29bf51f 100644
--- a/webkit/tools/layout_tests/test_expectations.txt
+++ b/webkit/tools/layout_tests/test_expectations.txt
@@ -2590,14 +2590,8 @@ BUG10861 WIN : LayoutTests/http/tests/plugins/post-url-file.html = PASS
BUG10861 MAC : LayoutTests/http/tests/plugins/post-url-file.html = TIMEOUT
// New failures from WebKit merge 42725:42805
-// Because of WebKit change http://trac.webkit.org/changeset/42740,
-// DumpRenderTree now dumps additional info on the element that was
-// passed to the policy delegate. So the dump changes.
-// We need to reflect the change in test shell.
-BUG11000 : LayoutTests/fast/encoding/mailto-always-utf-8.html = FAIL
-BUG11000 : LayoutTests/fast/loader/policy-delegate-action-hit-test-zoomed.html = FAIL
-BUG11000 : LayoutTests/http/tests/misc/policy-delegate-called-twice.html = FAIL
-BUG11000 : LayoutTests/http/tests/misc/redirect-to-external-url.html = FAIL
+// Need to implement WebFrameLoaderClient::dispatchUnableToImplmentPolicy().
+BUG24074 : LayoutTests/http/tests/misc/redirect-to-external-url.html = FAIL
// New failures from WebKit merge 42725:42805
// WebKit change http://trac.webkit.org/changeset/42785
diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc
index 75d6a58..7b74866 100644
--- a/webkit/tools/test_shell/test_webview_delegate.cc
+++ b/webkit/tools/test_shell/test_webview_delegate.cc
@@ -632,13 +632,21 @@ void TestWebViewDelegate::loadURLExternally(
WebNavigationPolicy TestWebViewDelegate::decidePolicyForNavigation(
WebFrame* frame, const WebURLRequest& request,
- WebNavigationType type, WebNavigationPolicy default_policy,
- bool is_redirect) {
+ WebNavigationType type, const WebNode& originating_node,
+ WebNavigationPolicy default_policy, bool is_redirect) {
WebNavigationPolicy result;
if (policy_delegate_enabled_) {
- printf("Policy delegate: attempt to load %s with navigation type '%s'\n",
+ printf("Policy delegate: attempt to load %s with navigation type '%s'",
GetURLDescription(request.url()).c_str(),
WebNavigationTypeToString(type));
+ WebNode node = originating_node;
+ if (!node.isNull()) {
+ printf(" originating from %s", node.nodeName().utf8().data());
+ for (node = node.parentNode(); !node.isNull(); node = node.parentNode()) {
+ printf(" > %s", node.nodeName().utf8().data());
+ }
+ }
+ printf("\n");
if (policy_delegate_is_permissive_) {
result = WebKit::WebNavigationPolicyCurrentTab;
} else {
diff --git a/webkit/tools/test_shell/test_webview_delegate.h b/webkit/tools/test_shell/test_webview_delegate.h
index b7e62d4..ff51b8b 100644
--- a/webkit/tools/test_shell/test_webview_delegate.h
+++ b/webkit/tools/test_shell/test_webview_delegate.h
@@ -184,8 +184,8 @@ class TestWebViewDelegate : public WebViewDelegate,
WebKit::WebNavigationPolicy);
virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
WebKit::WebFrame*, const WebKit::WebURLRequest&,
- WebKit::WebNavigationType, WebKit::WebNavigationPolicy default_policy,
- bool isRedirect);
+ WebKit::WebNavigationType, const WebKit::WebNode&,
+ WebKit::WebNavigationPolicy default_policy, bool isRedirect);
virtual void willSubmitForm(WebKit::WebFrame*, const WebKit::WebForm&) {}
virtual void willPerformClientRedirect(
WebKit::WebFrame*, const WebKit::WebURL& from, const WebKit::WebURL& to,