Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / serviceworkers / RequestTest.cpp
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6
7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptState.h"
9 #include "core/dom/Document.h"
10 #include "core/frame/Frame.h"
11 #include "core/testing/DummyPageHolder.h"
12 #include "modules/serviceworkers/Request.h"
13 #include "public/platform/WebServiceWorkerRequest.h"
14 #include "wtf/HashMap.h"
15 #include "wtf/text/WTFString.h"
16 #include <gtest/gtest.h>
17
18 namespace blink {
19 namespace {
20
21 class ServiceWorkerRequestTest : public ::testing::Test {
22 public:
23     ServiceWorkerRequestTest()
24         : m_page(DummyPageHolder::create(IntSize(1, 1))) { }
25
26     ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->document().frame()); }
27     ExecutionContext* executionContext() { return scriptState()->executionContext(); }
28
29 private:
30     OwnPtr<DummyPageHolder> m_page;
31 };
32
33 TEST_F(ServiceWorkerRequestTest, FromString)
34 {
35     TrackExceptionState exceptionState;
36
37     KURL url(ParsedURLString, "http://www.example.com/");
38     Request* request = Request::create(executionContext(), url, exceptionState);
39     ASSERT_FALSE(exceptionState.hadException());
40     ASSERT(request);
41     EXPECT_EQ(url, request->url());
42 }
43
44 TEST_F(ServiceWorkerRequestTest, FromRequest)
45 {
46     TrackExceptionState exceptionState;
47
48     KURL url(ParsedURLString, "http://www.example.com/");
49     Request* request1 = Request::create(executionContext(), url, exceptionState);
50     ASSERT(request1);
51
52     Request* request2 = Request::create(executionContext(), request1, exceptionState);
53     ASSERT_FALSE(exceptionState.hadException());
54     ASSERT(request2);
55     EXPECT_EQ(url, request2->url());
56 }
57
58 TEST_F(ServiceWorkerRequestTest, FromAndToWebRequest)
59 {
60     WebServiceWorkerRequest webRequest;
61
62     const KURL url(ParsedURLString, "http://www.example.com/");
63     const String method = "GET";
64     struct { const char* key; const char* value; } headers[] = { {"X-Foo", "bar"}, {"X-Quux", "foop"}, {0, 0} };
65     const String referrer = "http://www.referrer.com/";
66     const WebReferrerPolicy referrerPolicy = WebReferrerPolicyAlways;
67
68     webRequest.setURL(url);
69     webRequest.setMethod(method);
70     for (int i = 0; headers[i].key; ++i)
71         webRequest.setHeader(WebString::fromUTF8(headers[i].key), WebString::fromUTF8(headers[i].value));
72     webRequest.setReferrer(referrer, referrerPolicy);
73
74     Request* request = Request::create(executionContext(), webRequest);
75     ASSERT(request);
76     EXPECT_EQ(url, request->url());
77     EXPECT_EQ(method, request->method());
78     EXPECT_EQ(referrer, request->referrer());
79
80     Headers* requestHeaders = request->headers();
81
82     WTF::HashMap<String, String> headersMap;
83     for (int i = 0; headers[i].key; ++i)
84         headersMap.add(headers[i].key, headers[i].value);
85     EXPECT_EQ(headersMap.size(), requestHeaders->size());
86     for (WTF::HashMap<String, String>::iterator iter = headersMap.begin(); iter != headersMap.end(); ++iter) {
87         TrackExceptionState exceptionState;
88         EXPECT_EQ(iter->value, requestHeaders->get(iter->key, exceptionState));
89         EXPECT_FALSE(exceptionState.hadException());
90     }
91
92     WebServiceWorkerRequest secondWebRequest;
93     request->populateWebServiceWorkerRequest(secondWebRequest);
94     EXPECT_EQ(url, KURL(secondWebRequest.url()));
95     EXPECT_EQ(method, String(secondWebRequest.method()));
96     EXPECT_EQ(referrer, KURL(secondWebRequest.referrerUrl()));
97     EXPECT_EQ(referrerPolicy, secondWebRequest.referrerPolicy());
98     EXPECT_EQ(webRequest.headers(), secondWebRequest.headers());
99 }
100
101 } // namespace
102 } // namespace blink