Home | History | Annotate | Download | only in serviceworkers
      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/Response.h"
     13 #include "modules/serviceworkers/FetchResponseData.h"
     14 #include "public/platform/WebServiceWorkerResponse.h"
     15 #include <gtest/gtest.h>
     16 
     17 namespace blink {
     18 namespace {
     19 
     20 class ServiceWorkerResponseTest : public ::testing::Test {
     21 public:
     22     ServiceWorkerResponseTest()
     23         : m_page(DummyPageHolder::create(IntSize(1, 1))) { }
     24 
     25     ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->document().frame()); }
     26     ExecutionContext* executionContext() { return scriptState()->executionContext(); }
     27 
     28 private:
     29     OwnPtr<DummyPageHolder> m_page;
     30 };
     31 
     32 
     33 TEST_F(ServiceWorkerResponseTest, FromFetchResponseData)
     34 {
     35     const KURL url(ParsedURLString, "http://www.response.com");
     36 
     37     FetchResponseData* fetchResponseData = FetchResponseData::create();
     38     fetchResponseData->setURL(url);
     39 
     40     Response* response = Response::create(executionContext(), fetchResponseData);
     41     ASSERT(response);
     42     EXPECT_EQ(url, response->url());
     43 }
     44 
     45 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponse)
     46 {
     47     const KURL url(ParsedURLString, "http://www.webresponse.com/");
     48     const unsigned short status = 200;
     49     const String statusText = "the best status text";
     50     struct { const char* key; const char* value; } headers[] = { {"X-Foo", "bar"}, {"X-Quux", "foop"}, {0, 0} };
     51 
     52     WebServiceWorkerResponse webResponse;
     53     webResponse.setURL(url);
     54     webResponse.setStatus(status);
     55     webResponse.setStatusText(statusText);
     56     for (int i = 0; headers[i].key; ++i)
     57         webResponse.setHeader(WebString::fromUTF8(headers[i].key), WebString::fromUTF8(headers[i].value));
     58 
     59     Response* response = Response::create(executionContext(), webResponse);
     60     ASSERT(response);
     61     EXPECT_EQ(url, response->url());
     62     EXPECT_EQ(status, response->status());
     63     EXPECT_EQ(statusText, response->statusText());
     64 
     65     Headers* responseHeaders = response->headers();
     66 
     67     WTF::HashMap<String, String> headersMap;
     68     for (int i = 0; headers[i].key; ++i)
     69         headersMap.add(headers[i].key, headers[i].value);
     70     EXPECT_EQ(headersMap.size(), responseHeaders->size());
     71     for (WTF::HashMap<String, String>::iterator iter = headersMap.begin(); iter != headersMap.end(); ++iter) {
     72         TrackExceptionState exceptionState;
     73         EXPECT_EQ(iter->value, responseHeaders->get(iter->key, exceptionState));
     74         EXPECT_FALSE(exceptionState.hadException());
     75     }
     76 }
     77 
     78 } // namespace
     79 } // namespace blink
     80