15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/native/state_serializer.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/pickle.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/content_browser_client.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/navigation_entry.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/content_client.h" 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/page_state.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using std::string; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AndroidWebViewStateSerializerTest, TestHeaderSerialization) { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Pickle pickle; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool result = internal::WriteHeaderToPickle(&pickle); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(result); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator iterator(pickle); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = internal::RestoreHeaderFromPickle(&iterator); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(result); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AndroidWebViewStateSerializerTest, TestNavigationEntrySerialization) { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is required for NavigationEntry::Create. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::ContentClient content_client; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::SetContentClient(&content_client); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::ContentBrowserClient browser_client; 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::SetBrowserClientForTesting(&browser_client); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<content::NavigationEntry> entry( 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NavigationEntry::Create()); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL url("http://url"); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL virtual_url("http://virtual_url"); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Referrer referrer; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) referrer.url = GURL("http://referrer_url"); 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) referrer.policy = blink::WebReferrerPolicyOrigin; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 title(base::UTF8ToUTF16("title")); 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const content::PageState page_state = 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::PageState::CreateFromEncodedData("completely bogus state"); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool has_post_data = true; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL original_request_url("http://original_request_url"); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL base_url_for_data_url("http://base_url"); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool is_overriding_user_agent = true; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time timestamp = base::Time::FromInternalValue(12345); 57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const int http_status_code = 404; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetURL(url); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetVirtualURL(virtual_url); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetReferrer(referrer); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetTitle(title); 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) entry->SetPageState(page_state); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetHasPostData(has_post_data); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetOriginalRequestURL(original_request_url); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetBaseURLForDataURL(base_url_for_data_url); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetIsOverridingUserAgent(is_overriding_user_agent); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry->SetTimestamp(timestamp); 69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) entry->SetHttpStatusCode(http_status_code); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Pickle pickle; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool result = internal::WriteNavigationEntryToPickle(*entry, &pickle); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(result); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<content::NavigationEntry> copy(content::NavigationEntry::Create()); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator iterator(pickle); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result = internal::RestoreNavigationEntryFromPickle(&iterator, copy.get()); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(result); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url, copy->GetURL()); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(virtual_url, copy->GetVirtualURL()); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(referrer.url, copy->GetReferrer().url); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(referrer.policy, copy->GetReferrer().policy); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(title, copy->GetTitle()); 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(page_state, copy->GetPageState()); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(has_post_data, copy->GetHasPostData()); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(original_request_url, copy->GetOriginalRequestURL()); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(base_url_for_data_url, copy->GetBaseURLForDataURL()); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(is_overriding_user_agent, copy->GetIsOverridingUserAgent()); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(timestamp, copy->GetTimestamp()); 91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(http_status_code, copy->GetHttpStatusCode()); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 95