- Revision
- 116612
- Author
- [email protected]
- Date
- 2012-05-09 23:42:14 -0700 (Wed, 09 May 2012)
Log Message
[chromium] Add ability to override user agent string per-WebFrameClient
https://bugs.webkit.org/show_bug.cgi?id=83959
Patch by Dan Alcantara <[email protected]> on 2012-05-09
Reviewed by Adam Barth.
Adds a method that can be used to override the normal user agent in
chromium. Also adds a unit test to check if the override is taking effect.
* WebKit.gypi:
* public/WebFrameClient.h:
(WebFrameClient):
(WebKit::WebFrameClient::userAgent):
* src/FrameLoaderClientImpl.cpp:
(WebKit::FrameLoaderClientImpl::userAgent):
* tests/FrameLoaderClientImplTest.cpp: Added.
(WebKit):
(TestWebFrameClient):
(WebKit::TestWebFrameClient::setUserAgentOverride):
(FrameLoaderClientImplTest):
(WebKit::FrameLoaderClientImplTest::SetUp):
(WebKit::FrameLoaderClientImplTest::TearDown):
(WebKit::FrameLoaderClientImplTest::setUserAgentOverride):
(WebKit::FrameLoaderClientImplTest::userAgent):
(WebKit::TEST_F):
Modified Paths
Added Paths
Diff
Modified: trunk/Source/WebKit/chromium/ChangeLog (116611 => 116612)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-05-10 06:13:00 UTC (rev 116611)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-05-10 06:42:14 UTC (rev 116612)
@@ -1,3 +1,30 @@
+2012-05-09 Dan Alcantara <[email protected]>
+
+ [chromium] Add ability to override user agent string per-WebFrameClient
+ https://bugs.webkit.org/show_bug.cgi?id=83959
+
+ Reviewed by Adam Barth.
+
+ Adds a method that can be used to override the normal user agent in
+ chromium. Also adds a unit test to check if the override is taking effect.
+
+ * WebKit.gypi:
+ * public/WebFrameClient.h:
+ (WebFrameClient):
+ (WebKit::WebFrameClient::userAgent):
+ * src/FrameLoaderClientImpl.cpp:
+ (WebKit::FrameLoaderClientImpl::userAgent):
+ * tests/FrameLoaderClientImplTest.cpp: Added.
+ (WebKit):
+ (TestWebFrameClient):
+ (WebKit::TestWebFrameClient::setUserAgentOverride):
+ (FrameLoaderClientImplTest):
+ (WebKit::FrameLoaderClientImplTest::SetUp):
+ (WebKit::FrameLoaderClientImplTest::TearDown):
+ (WebKit::FrameLoaderClientImplTest::setUserAgentOverride):
+ (WebKit::FrameLoaderClientImplTest::userAgent):
+ (WebKit::TEST_F):
+
2012-05-09 Charlie Reis <[email protected]>
Add dispatchMessageEventWithOriginCheck to WebFrame
Modified: trunk/Source/WebKit/chromium/WebKit.gypi (116611 => 116612)
--- trunk/Source/WebKit/chromium/WebKit.gypi 2012-05-10 06:13:00 UTC (rev 116611)
+++ trunk/Source/WebKit/chromium/WebKit.gypi 2012-05-10 06:42:14 UTC (rev 116612)
@@ -102,6 +102,7 @@
'tests/FakeGraphicsContext3DTest.cpp',
'tests/FakeWebGraphicsContext3D.h',
'tests/FloatQuadTest.cpp',
+ 'tests/FrameLoaderClientImplTest.cpp',
'tests/FrameTestHelpers.cpp',
'tests/FrameTestHelpers.h',
'tests/IDBBindingUtilitiesTest.cpp',
Modified: trunk/Source/WebKit/chromium/public/WebFrameClient.h (116611 => 116612)
--- trunk/Source/WebKit/chromium/public/WebFrameClient.h 2012-05-10 06:13:00 UTC (rev 116611)
+++ trunk/Source/WebKit/chromium/public/WebFrameClient.h 2012-05-10 06:42:14 UTC (rev 116612)
@@ -397,6 +397,11 @@
WebSecurityOrigin target,
WebDOMMessageEvent) { return false; }
+ // Asks the embedder if a specific user agent should be used for the given
+ // URL. Returns true if it should, along with the user agent. If false,
+ // WebKitPlatformSupport::userAgent() will be called to provide one.
+ virtual bool userAgent(const WebURL& url, WebString* userAgent) { return false; }
+
protected:
~WebFrameClient() { }
};
Modified: trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp (116611 => 116612)
--- trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp 2012-05-10 06:13:00 UTC (rev 116611)
+++ trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp 2012-05-10 06:42:14 UTC (rev 116612)
@@ -1383,6 +1383,10 @@
String FrameLoaderClientImpl::userAgent(const KURL& url)
{
+ WebString override;
+ if (m_webFrame->client()->userAgent(WebURL(url), &override))
+ return override;
+
return WebKit::Platform::current()->userAgent(url);
}
Added: trunk/Source/WebKit/chromium/tests/FrameLoaderClientImplTest.cpp (0 => 116612)
--- trunk/Source/WebKit/chromium/tests/FrameLoaderClientImplTest.cpp (rev 0)
+++ trunk/Source/WebKit/chromium/tests/FrameLoaderClientImplTest.cpp 2012-05-10 06:42:14 UTC (rev 116612)
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2011, 2012 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 "FrameLoaderClientImpl.h"
+
+#include "KURL.h"
+#include "WebFrameClient.h"
+#include "WebFrameImpl.h"
+#include "WebView.h"
+
+#include <gtest/gtest.h>
+#include <wtf/text/WTFString.h>
+
+using namespace WebKit;
+
+namespace {
+
+class TestWebFrameClient : public WebFrameClient {
+public:
+ bool userAgent(const WebURL& url, WebString* userAgent) OVERRIDE
+ {
+ if (m_userAgentOverride.isEmpty())
+ return false;
+
+ *userAgent = m_userAgentOverride;
+ return true;
+ }
+
+ void setUserAgentOverride(const WebString& userAgent)
+ {
+ m_userAgentOverride = userAgent;
+ }
+
+private:
+ WebString m_userAgentOverride;
+};
+
+class FrameLoaderClientImplTest : public testing::Test {
+public:
+ void SetUp()
+ {
+ m_webView = WebView::create(0);
+ m_webView->initializeMainFrame(&m_webFrameClient);
+ WebFrameImpl* frame = static_cast<WebFrameImpl*>(m_webView->mainFrame());
+ m_frameLoaderClientImpl = static_cast<FrameLoaderClientImpl*>(frame->frame()->loader()->client());
+ }
+
+ void TearDown()
+ {
+ m_webView->close();
+ }
+
+ void setUserAgentOverride(const WebString& userAgent)
+ {
+ return m_webFrameClient.setUserAgentOverride(userAgent);
+ }
+
+ const WebString userAgent()
+ {
+ // The test always returns the same user agent, regardless of the URL passed in.
+ WebCore::KURL dummyURL(WebCore::ParsedURLString, "about:blank");
+ WTF::CString userAgent = m_frameLoaderClientImpl->userAgent(dummyURL).utf8();
+ return WebString::fromUTF8(userAgent.data(), userAgent.length());
+ }
+
+protected:
+ TestWebFrameClient m_webFrameClient;
+ FrameLoaderClientImpl* m_frameLoaderClientImpl;
+ WebView* m_webView;
+};
+
+TEST_F(FrameLoaderClientImplTest, UserAgentOverride)
+{
+ const WebString defaultUserAgent = userAgent();
+ const WebString override = WebString::fromUTF8("dummy override");
+
+ // Override the user agent and make sure we get it back.
+ setUserAgentOverride(override);
+ EXPECT_TRUE(override.equals(userAgent()));
+
+ // Remove the override and make sure we get the original back.
+ setUserAgentOverride(WebString());
+ EXPECT_TRUE(defaultUserAgent.equals(userAgent()));
+}
+
+} // namespace