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"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/render_view_test.h"
7bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/url_request_info_util.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/connection.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/url_request_info_resource.h"
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/shared_impl/proxy_lock.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/test_globals.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/url_request_info_data.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/thunk.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h"
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrameClient.h"
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h"
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent.h"
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent_util.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test is a end-to-end test from the resource to the WebKit request
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// object. The actual resource implementation is so simple, it makes sense to
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test it by making sure the conversion routines actually work at the same
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// time.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebCString;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFrame;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFrameClient;
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString;
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebView;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURL;
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURLRequest;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsExpected(const WebCString& web_string, const char* expected) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* result = web_string.data();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return strcmp(result, expected) == 0;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsExpected(const WebString& web_string, const char* expected) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return IsExpected(web_string.utf8(), expected);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The base class destructor is protected, so derive.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestWebFrameClient : public WebFrameClient {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::proxy::URLRequestInfoResource;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::URLRequestInfoData;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass URLRequestInfoTest : public RenderViewTest {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  URLRequestInfoTest() : pp_instance_(1234) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewTest::SetUp();
64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ppapi::ProxyLock::DisableLockingOnThreadForTest();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test_globals_.GetResourceTracker()->DidCreateInstance(pp_instance_);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // This resource doesn't do IPC, so a null connection is fine.
69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    info_ = new URLRequestInfoResource(ppapi::proxy::Connection(),
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       pp_instance_,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       URLRequestInfoData());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test_globals_.GetResourceTracker()->DidDeleteInstance(pp_instance_);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewTest::TearDown();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetDownloadToFile() {
802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return false;
842385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.downloadToFile();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebCString GetURL() {
882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return WebCString();
922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.url().spec();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebString GetMethod() {
962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
98d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
992385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return WebString();
1002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.httpMethod();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebString GetHeaderValue(const char* field) {
1042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    WebURLRequest web_request;
1052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    URLRequestInfoData data = info_->GetData();
106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (!CreateWebURLRequest(pp_instance_, &data, GetMainFrame(), &web_request))
1072385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      return WebString();
1082385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    return web_request.httpHeaderField(WebString::fromUTF8(field));
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool SetBooleanProperty(PP_URLRequestProperty prop, bool b) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return info_->SetBooleanProperty(prop, b);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool SetStringProperty(PP_URLRequestProperty prop, const std::string& s) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return info_->SetStringProperty(prop, s);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Instance pp_instance_;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Needs to be alive for resource tracking to work.
121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  ppapi::TestGlobals test_globals_;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<URLRequestInfoResource> info_;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, GetInterface) {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PPB_URLRequestInfo* request_info =
128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      ppapi::thunk::GetPPB_URLRequestInfo_1_0_Thunk();
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->Create);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->IsURLRequestInfo);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->SetProperty);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->AppendDataToBody);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(request_info->AppendFileToBody);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, AsURLRequestInfo) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(info_, info_->AsPPB_URLRequestInfo_API());
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, StreamToFile) {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetStringProperty(PP_URLREQUESTPROPERTY_URL, "http://www.google.com");
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetDownloadToFile());
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_STREAMTOFILE, true));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(GetDownloadToFile());
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_STREAMTOFILE, false));
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(GetDownloadToFile());
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, FollowRedirects) {
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().follow_redirects);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, false));
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().follow_redirects);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, true));
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().follow_redirects);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, RecordDownloadProgress) {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_download_progress);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, true));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().record_download_progress);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, false));
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_download_progress);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, RecordUploadProgress) {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_upload_progress);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, true));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().record_upload_progress);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, false));
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().record_upload_progress);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, AllowCrossOriginRequests) {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_cross_origin_requests);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, true));
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().allow_cross_origin_requests);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, false));
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_cross_origin_requests);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, AllowCredentials) {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_credentials);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, true));
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(info_->GetData().allow_credentials);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetBooleanProperty(
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, false));
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(info_->GetData().allow_credentials);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, SetURL) {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* url = "http://www.google.com/";
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetStringProperty(
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_URL, url));
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(GetURL(), url));
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, JavascriptURL) {
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* url = "javascript:foo = bar";
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(URLRequestRequiresUniversalAccess(info_->GetData()));
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetStringProperty(PP_URLREQUESTPROPERTY_URL, url);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(URLRequestRequiresUniversalAccess(info_->GetData()));
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, SetMethod) {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test default method is "GET".
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(GetMethod(), "GET"));
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetStringProperty(
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_METHOD, "POST"));
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(GetMethod(), "POST"));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLRequestInfoTest, SetHeaders) {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test default header field.
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetHeaderValue("foo"), ""));
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test that we can set a header field.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetStringProperty(
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_HEADERS, "foo: bar"));
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetHeaderValue("foo"), "bar"));
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test that we can set multiple header fields using \n delimiter.
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(SetStringProperty(
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_URLREQUESTPROPERTY_HEADERS, "foo: bar\nbar: baz"));
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetHeaderValue("foo"), "bar"));
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(IsExpected(
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetHeaderValue("bar"), "baz"));
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(bbudge) Unit tests for AppendDataToBody, AppendFileToBody.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch}  // namespace content
258