Home | History | Annotate | Download | only in native
      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 "android_webview/native/state_serializer.h"
      6 
      7 #include <string>
      8 
      9 #include "base/memory/scoped_ptr.h"
     10 #include "base/pickle.h"
     11 #include "base/strings/utf_string_conversions.h"
     12 #include "base/time/time.h"
     13 #include "content/public/browser/content_browser_client.h"
     14 #include "content/public/browser/navigation_entry.h"
     15 #include "content/public/common/content_client.h"
     16 #include "content/public/common/page_state.h"
     17 #include "testing/gtest/include/gtest/gtest.h"
     18 #include "url/gurl.h"
     19 
     20 using std::string;
     21 
     22 namespace android_webview {
     23 
     24 TEST(AndroidWebViewStateSerializerTest, TestHeaderSerialization) {
     25   Pickle pickle;
     26   bool result = internal::WriteHeaderToPickle(&pickle);
     27   EXPECT_TRUE(result);
     28 
     29   PickleIterator iterator(pickle);
     30   result = internal::RestoreHeaderFromPickle(&iterator);
     31   EXPECT_TRUE(result);
     32 }
     33 
     34 TEST(AndroidWebViewStateSerializerTest, TestNavigationEntrySerialization) {
     35   // This is required for NavigationEntry::Create.
     36   content::ContentClient content_client;
     37   content::SetContentClient(&content_client);
     38   content::ContentBrowserClient browser_client;
     39   content::SetBrowserClientForTesting(&browser_client);
     40 
     41   scoped_ptr<content::NavigationEntry> entry(
     42       content::NavigationEntry::Create());
     43 
     44   const GURL url("http://url");
     45   const GURL virtual_url("http://virtual_url");
     46   content::Referrer referrer;
     47   referrer.url = GURL("http://referrer_url");
     48   referrer.policy = blink::WebReferrerPolicyOrigin;
     49   const base::string16 title(base::UTF8ToUTF16("title"));
     50   const content::PageState page_state =
     51       content::PageState::CreateFromEncodedData("completely bogus state");
     52   const bool has_post_data = true;
     53   const GURL original_request_url("http://original_request_url");
     54   const GURL base_url_for_data_url("http://base_url");
     55   const bool is_overriding_user_agent = true;
     56   const base::Time timestamp = base::Time::FromInternalValue(12345);
     57   const int http_status_code = 404;
     58 
     59   entry->SetURL(url);
     60   entry->SetVirtualURL(virtual_url);
     61   entry->SetReferrer(referrer);
     62   entry->SetTitle(title);
     63   entry->SetPageState(page_state);
     64   entry->SetHasPostData(has_post_data);
     65   entry->SetOriginalRequestURL(original_request_url);
     66   entry->SetBaseURLForDataURL(base_url_for_data_url);
     67   entry->SetIsOverridingUserAgent(is_overriding_user_agent);
     68   entry->SetTimestamp(timestamp);
     69   entry->SetHttpStatusCode(http_status_code);
     70 
     71   Pickle pickle;
     72   bool result = internal::WriteNavigationEntryToPickle(*entry, &pickle);
     73   EXPECT_TRUE(result);
     74 
     75   scoped_ptr<content::NavigationEntry> copy(content::NavigationEntry::Create());
     76   PickleIterator iterator(pickle);
     77   result = internal::RestoreNavigationEntryFromPickle(&iterator, copy.get());
     78   EXPECT_TRUE(result);
     79 
     80   EXPECT_EQ(url, copy->GetURL());
     81   EXPECT_EQ(virtual_url, copy->GetVirtualURL());
     82   EXPECT_EQ(referrer.url, copy->GetReferrer().url);
     83   EXPECT_EQ(referrer.policy, copy->GetReferrer().policy);
     84   EXPECT_EQ(title, copy->GetTitle());
     85   EXPECT_EQ(page_state, copy->GetPageState());
     86   EXPECT_EQ(has_post_data, copy->GetHasPostData());
     87   EXPECT_EQ(original_request_url, copy->GetOriginalRequestURL());
     88   EXPECT_EQ(base_url_for_data_url, copy->GetBaseURLForDataURL());
     89   EXPECT_EQ(is_overriding_user_agent, copy->GetIsOverridingUserAgent());
     90   EXPECT_EQ(timestamp, copy->GetTimestamp());
     91   EXPECT_EQ(http_status_code, copy->GetHttpStatusCode());
     92 }
     93 
     94 }  // namespace android_webview
     95