| Index: webkit/plugins/ppapi/url_request_info_unittest.cc
|
| diff --git a/webkit/plugins/ppapi/url_request_info_unittest.cc b/webkit/plugins/ppapi/url_request_info_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..341eeb27e275a0921c68cb9373ea24e433ada721
|
| --- /dev/null
|
| +++ b/webkit/plugins/ppapi/url_request_info_unittest.cc
|
| @@ -0,0 +1,249 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebFrameClient.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebView.h"
|
| +
|
| +#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
|
| +#include "webkit/plugins/ppapi/ppb_url_request_info_impl.h"
|
| +#include "webkit/plugins/ppapi/ppapi_unittest.h"
|
| +
|
| +using WebKit::WebCString;
|
| +using WebKit::WebFrame;
|
| +using WebKit::WebFrameClient;
|
| +using WebKit::WebString;
|
| +using WebKit::WebView;
|
| +using WebKit::WebURL;
|
| +using WebKit::WebURLRequest;
|
| +
|
| +namespace {
|
| +
|
| +bool IsExpected(const WebCString& web_string, const char* expected) {
|
| + const char* result = web_string.data();
|
| + return strcmp(result, expected) == 0;
|
| +}
|
| +
|
| +bool IsExpected(const WebString& web_string, const char* expected) {
|
| + return IsExpected(web_string.utf8(), expected);
|
| +}
|
| +
|
| +bool IsNullOrEmpty(const WebString& web_string) {
|
| + return web_string.isNull() || web_string.isEmpty();
|
| +}
|
| +
|
| +// The base class destructor is protected, so derive.
|
| +class TestWebFrameClient : public WebFrameClient {
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +namespace webkit {
|
| +namespace ppapi {
|
| +
|
| +class URLRequestInfoTest : public PpapiUnittest {
|
| + public:
|
| + URLRequestInfoTest() : info_(new PPB_URLRequestInfo_Impl(module())) {
|
| + }
|
| +
|
| + static void SetUpTestCase() {
|
| + web_view_ = WebView::create(0, 0);
|
| + web_view_->initializeMainFrame(&web_frame_client_);
|
| + WebURL web_url(GURL(""));
|
| + WebURLRequest url_request;
|
| + url_request.initialize();
|
| + url_request.setURL(web_url);
|
| + frame_ = web_view_->mainFrame();
|
| + frame_->loadRequest(url_request);
|
| + }
|
| +
|
| + static void TearDownTestCase() {
|
| + web_view_->close();
|
| + }
|
| +
|
| + bool GetDownloadToFile() {
|
| + WebURLRequest web_request = info_->ToWebURLRequest(frame_);
|
| + return web_request.downloadToFile();
|
| + }
|
| +
|
| + WebCString GetURL() {
|
| + WebURLRequest web_request = info_->ToWebURLRequest(frame_);
|
| + return web_request.url().spec();
|
| + }
|
| +
|
| + WebString GetMethod() {
|
| + WebURLRequest web_request = info_->ToWebURLRequest(frame_);
|
| + return web_request.httpMethod();
|
| + }
|
| +
|
| + WebString GetHeaderValue(const char* field) {
|
| + WebURLRequest web_request = info_->ToWebURLRequest(frame_);
|
| + return web_request.httpHeaderField(WebString::fromUTF8(field));
|
| + }
|
| +
|
| + scoped_refptr<PPB_URLRequestInfo_Impl> info_;
|
| +
|
| + static TestWebFrameClient web_frame_client_;
|
| + static WebView* web_view_;
|
| + static WebFrame* frame_;
|
| +};
|
| +
|
| +TestWebFrameClient URLRequestInfoTest::web_frame_client_;
|
| +WebView* URLRequestInfoTest::web_view_;
|
| +WebFrame* URLRequestInfoTest::frame_;
|
| +
|
| +TEST_F(URLRequestInfoTest, GetInterface) {
|
| + const PPB_URLRequestInfo* interface = info_->GetInterface();
|
| + ASSERT_TRUE(interface);
|
| + ASSERT_TRUE(interface->Create);
|
| + ASSERT_TRUE(interface->IsURLRequestInfo);
|
| + ASSERT_TRUE(interface->SetProperty);
|
| + ASSERT_TRUE(interface->AppendDataToBody);
|
| + ASSERT_TRUE(interface->AppendFileToBody);
|
| + ASSERT_TRUE(interface->Create);
|
| + ASSERT_TRUE(interface->Create);
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, AsURLRequestInfo) {
|
| + ASSERT_EQ(info_, info_->AsPPB_URLRequestInfo_Impl());
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, StreamToFile) {
|
| + info_->SetStringProperty(PP_URLREQUESTPROPERTY_URL, "http://www.google.com");
|
| +
|
| + ASSERT_FALSE(GetDownloadToFile());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_STREAMTOFILE, true));
|
| + ASSERT_TRUE(GetDownloadToFile());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_STREAMTOFILE, false));
|
| + ASSERT_FALSE(GetDownloadToFile());
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, FollowRedirects) {
|
| + ASSERT_TRUE(info_->follow_redirects());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, false));
|
| + ASSERT_FALSE(info_->follow_redirects());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, true));
|
| + ASSERT_TRUE(info_->follow_redirects());
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, RecordDownloadProgress) {
|
| + ASSERT_FALSE(info_->record_download_progress());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, true));
|
| + ASSERT_TRUE(info_->record_download_progress());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, false));
|
| + ASSERT_FALSE(info_->record_download_progress());
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, RecordUploadProgress) {
|
| + ASSERT_FALSE(info_->record_upload_progress());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, true));
|
| + ASSERT_TRUE(info_->record_upload_progress());
|
| +
|
| + ASSERT_TRUE(info_->SetBooleanProperty(
|
| + PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, false));
|
| + ASSERT_FALSE(info_->record_upload_progress());
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, SetURL) {
|
| + // Test default URL is "about:blank".
|
| + ASSERT_TRUE(IsExpected(GetURL(), "about:blank"));
|
| +
|
| + const char* url = "http://www.google.com/";
|
| + ASSERT_TRUE(info_->SetStringProperty(
|
| + PP_URLREQUESTPROPERTY_URL, url));
|
| + ASSERT_TRUE(IsExpected(GetURL(), url));
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, SetMethod) {
|
| + // Test default method is "GET".
|
| + ASSERT_TRUE(IsExpected(GetMethod(), "GET"));
|
| + ASSERT_TRUE(info_->SetStringProperty(
|
| + PP_URLREQUESTPROPERTY_METHOD, "POST"));
|
| + ASSERT_TRUE(IsExpected(GetMethod(), "POST"));
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, SetValidHeaders) {
|
| + // Test default header field.
|
| + ASSERT_TRUE(IsExpected(
|
| + GetHeaderValue("foo"), ""));
|
| + // Test that we can set a header field.
|
| + ASSERT_TRUE(info_->SetStringProperty(
|
| + PP_URLREQUESTPROPERTY_HEADERS, "foo: bar"));
|
| + ASSERT_TRUE(IsExpected(
|
| + GetHeaderValue("foo"), "bar"));
|
| + // Test that we can set multiple header fields using \n delimiter.
|
| + ASSERT_TRUE(info_->SetStringProperty(
|
| + PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\nbar: baz"));
|
| + ASSERT_TRUE(IsExpected(
|
| + GetHeaderValue("foo"), "bar"));
|
| + ASSERT_TRUE(IsExpected(
|
| + GetHeaderValue("bar"), "baz"));
|
| +}
|
| +
|
| +TEST_F(URLRequestInfoTest, SetInvalidHeaders) {
|
| + const char* const kForbiddenHeaderFields[] = {
|
| + "accept-charset",
|
| + "accept-encoding",
|
| + "connection",
|
| + "content-length",
|
| + "cookie",
|
| + "cookie2",
|
| + "content-transfer-encoding",
|
| + "date",
|
| + "expect",
|
| + "host",
|
| + "keep-alive",
|
| + "origin",
|
| + "referer",
|
| + "te",
|
| + "trailer",
|
| + "transfer-encoding",
|
| + "upgrade",
|
| + "user-agent",
|
| + "via",
|
| +
|
| + "proxy-foo", // Test for any header starting with proxy- or sec-.
|
| + "sec-foo",
|
| + };
|
| +
|
| + // Test that no forbidden header fields can be set.
|
| + for (size_t i = 0; i < arraysize(kForbiddenHeaderFields); ++i) {
|
| + std::string headers(kForbiddenHeaderFields[i]);
|
| + headers.append(": foo");
|
| + ASSERT_FALSE(info_->SetStringProperty(
|
| + PP_URLREQUESTPROPERTY_HEADERS, headers.c_str()));
|
| + ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue(kForbiddenHeaderFields[i])));
|
| + }
|
| +
|
| + // Test that forbidden header can't be set in various ways.
|
| + ASSERT_FALSE(info_->SetStringProperty(
|
| + PP_URLREQUESTPROPERTY_HEADERS, "cookie : foo"));
|
| + ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue("cookie")));
|
| +
|
| + // Test that forbidden header can't be set with an allowed one.
|
| + ASSERT_FALSE(info_->SetStringProperty(
|
| + PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\ncookie: foo"));
|
| + ASSERT_TRUE(IsNullOrEmpty(GetHeaderValue("cookie")));
|
| +}
|
| +
|
| +// TODO(bbudge) Unit tests for AppendDataToBody, AppendFileToBody.
|
| +
|
| +} // namespace ppapi
|
| +} // namespace webkit
|
| +
|
|
|