15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/common/user_agent.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/render_view_test.h"
8bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/url_request_info_util.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/connection.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/url_request_info_resource.h"
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/shared_impl/proxy_lock.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/test_globals.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/url_request_info_data.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/thunk.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h"
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrameClient.h"
18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "third_party/WebKit/public/web/WebLocalFrame.h"
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test is a end-to-end test from the resource to the WebKit request
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// object. The actual resource implementation is so simple, it makes sense to
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test it by making sure the conversion routines actually work at the same
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// time.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebCString;
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFrameClient;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebView;
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURL;
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURLRequest;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsExpected(const WebCString& web_string, const char* expected) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* result = web_string.data();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return strcmp(result, expected) == 0;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsExpected(const WebString& web_string, const char* expected) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return IsExpected(web_string.utf8(), expected);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The base class destructor is protected, so derive.
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass TestWebFrameClient : public WebFrameClient {};
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::proxy::URLRequestInfoResource;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::URLRequestInfoData;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass URLRequestInfoTest : public RenderViewTest {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Note: using -1 as the instance value allows code in
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // url_request_info_util.cc to detect that this is a test instance.
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  URLRequestInfoTest() : pp_instance_(-1) {}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewTest::SetUp();
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ppapi::ProxyLock::DisableLockingOnThreadForTest();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test_globals_.GetResourceTracker()->DidCreateInstance(pp_instance_);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // This resource doesn't do IPC, so a null connection is fine.
67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    info_ = new URLRequestInfoResource(
68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        ppapi::proxy::Connection(), pp_instance_, URLRequestInfoData());
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test_globals_.GetResourceTracker()->DidDeleteInstance(pp_instance_);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewTest::TearDown();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetDownloadToFile() {
772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return false;
812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.downloadToFile();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebCString GetURL() {
852385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return WebCString();
892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.url().spec();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebString GetMethod() {
932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return WebString();
972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.httpMethod();
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebString GetHeaderValue(const char* field) {
1012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
1022385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
1042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return WebString();
1052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.httpHeaderField(WebString::fromUTF8(field));
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool SetBooleanProperty(PP_URLRequestProperty prop, bool b) {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return info_->SetBooleanProperty(prop, b);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool SetStringProperty(PP_URLRequestProperty prop, const std::string& s) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return info_->SetStringProperty(prop, s);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Instance pp_instance_;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Needs to be alive for resource tracking to work.
118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  ppapi::TestGlobals test_globals_;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<URLRequestInfoResource> info_;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, GetInterface) {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PPB_URLRequestInfo* request_info =
125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      ppapi::thunk::GetPPB_URLRequestInfo_1_0_Thunk();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->Create);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->IsURLRequestInfo);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->SetProperty);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->AppendDataToBody);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->AppendFileToBody);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, AsURLRequestInfo) {
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(info_.get(), info_->AsPPB_URLRequestInfo_API());
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, StreamToFile) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetStringProperty(PP_URLREQUESTPROPERTY_URL, "http://www.google.com");
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetDownloadToFile());
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetBooleanProperty(PP_URLREQUESTPROPERTY_STREAMTOFILE, true));
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(GetDownloadToFile());
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetBooleanProperty(PP_URLREQUESTPROPERTY_STREAMTOFILE, false));
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetDownloadToFile());
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, FollowRedirects) {
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().follow_redirects);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetBooleanProperty(PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, false));
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().follow_redirects);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
156a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetBooleanProperty(PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, true));
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().follow_redirects);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, RecordDownloadProgress) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_download_progress);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
163a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(
164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      SetBooleanProperty(PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, true));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().record_download_progress);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(
168a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      SetBooleanProperty(PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, false));
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_download_progress);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, RecordUploadProgress) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_upload_progress);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(
176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      SetBooleanProperty(PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, true));
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().record_upload_progress);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(
180a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      SetBooleanProperty(PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, false));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_upload_progress);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, AllowCrossOriginRequests) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_cross_origin_requests);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
187a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(
188a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      SetBooleanProperty(PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, true));
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().allow_cross_origin_requests);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
191a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetBooleanProperty(PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS,
192a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                 false));
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_cross_origin_requests);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, AllowCredentials) {
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_credentials);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
199a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetBooleanProperty(PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, true));
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().allow_credentials);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
202a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(
203a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      SetBooleanProperty(PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, false));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_credentials);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, SetURL) {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* url = "http://www.google.com/";
209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetStringProperty(PP_URLREQUESTPROPERTY_URL, url));
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(GetURL(), url));
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, JavascriptURL) {
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* url = "javascript:foo = bar";
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(URLRequestRequiresUniversalAccess(info_->GetData()));
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetStringProperty(PP_URLREQUESTPROPERTY_URL, url);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(URLRequestRequiresUniversalAccess(info_->GetData()));
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, SetMethod) {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test default method is "GET".
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(GetMethod(), "GET"));
223a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetStringProperty(PP_URLREQUESTPROPERTY_METHOD, "POST"));
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(GetMethod(), "POST"));
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, SetHeaders) {
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test default header field.
229a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(IsExpected(GetHeaderValue("foo"), ""));
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test that we can set a header field.
231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(SetStringProperty(PP_URLREQUESTPROPERTY_HEADERS, "foo: bar"));
232a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(IsExpected(GetHeaderValue("foo"), "bar"));
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test that we can set multiple header fields using \n delimiter.
234a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(
235a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      SetStringProperty(PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\nbar: baz"));
236a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(IsExpected(GetHeaderValue("foo"), "bar"));
237a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_TRUE(IsExpected(GetHeaderValue("bar"), "baz"));
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(bbudge) Unit tests for AppendDataToBody, AppendFileToBody.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch}  // namespace content
243