diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-24 22:00:59 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-24 22:00:59 +0000 |
commit | f66375e4d724f5da1a406d553259685451cdf55d (patch) | |
tree | 25ecde7778c92926a814fd6ae4bc1acc42a2ae38 /components | |
parent | 28b81067d7fa71d061d807267a1ac09f5e4fbd12 (diff) | |
download | chromium_src-f66375e4d724f5da1a406d553259685451cdf55d.zip chromium_src-f66375e4d724f5da1a406d553259685451cdf55d.tar.gz chromium_src-f66375e4d724f5da1a406d553259685451cdf55d.tar.bz2 |
Introduce content::PageState.
This is a concrete class wrapping a string that contains the
data of a serialized WebKit::WebHistoryItem class. Previously,
we've just passed around these as strings, giving them names
like "state", "content_state" or "history_state". It has been
hard to identify all of the places in the code where these
strings get passed around. A concrete class should make usage
more apparent. Plus, instead of manipulating the strings using
methods from webkit/glue/glue_serialize.h, we can just declare
methods on the PageState class. This makes the code much cleaner.
This first pass just implements PageState in terms of glue_serialize.
It also adds content/public/renderer/history_item_serialization.h
as the home for PageState to WebKit::WebHistoryItem conversion,
which should ideally only be usable from the renderer process.
(This bit is a step toward resolving bug 237243.)
page_state.h declares operator==() to support DCHECK_EQ, which
seems consistent with the idea of PageState being a replacement
for std::string. I didn't want to litter tests with calls to
PageState::ToEncodedData(). That would get cumbersome.
BUG=240426
R=brettw@chromium.org, tsepez@chromium.org
Review URL: https://codereview.chromium.org/14985014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202188 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components')
5 files changed, 35 insertions, 30 deletions
diff --git a/components/sessions/serialized_navigation_entry.cc b/components/sessions/serialized_navigation_entry.cc index 6ba7533..e322830 100644 --- a/components/sessions/serialized_navigation_entry.cc +++ b/components/sessions/serialized_navigation_entry.cc @@ -12,7 +12,6 @@ #include "sync/protocol/session_specifics.pb.h" #include "sync/util/time.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebReferrerPolicy.h" -#include "webkit/glue/glue_serialize.h" using content::NavigationEntry; @@ -41,7 +40,7 @@ SerializedNavigationEntry SerializedNavigationEntry::FromNavigationEntry( navigation.referrer_ = entry.GetReferrer(); navigation.virtual_url_ = entry.GetVirtualURL(); navigation.title_ = entry.GetTitle(); - navigation.content_state_ = entry.GetContentState(); + navigation.page_state_ = entry.GetPageState(); navigation.transition_type_ = entry.GetTransitionType(); navigation.has_post_data_ = entry.GetHasPostData(); navigation.post_id_ = entry.GetPostID(); @@ -69,7 +68,8 @@ SerializedNavigationEntry SerializedNavigationEntry::FromSyncData( WebKit::WebReferrerPolicyDefault); navigation.virtual_url_ = GURL(sync_data.virtual_url()); navigation.title_ = UTF8ToUTF16(sync_data.title()); - navigation.content_state_ = sync_data.state(); + navigation.page_state_ = + content::PageState::CreateFromEncodedData(sync_data.state()); uint32 transition = 0; if (sync_data.has_page_transition()) { @@ -205,7 +205,7 @@ enum TypeMask { // index_ // virtual_url_ // title_ -// content_state_ +// page_state_ // transition_type_ // // Added on later: @@ -228,12 +228,12 @@ void SerializedNavigationEntry::WriteToPickle(int max_size, WriteString16ToPickle(pickle, &bytes_written, max_size, title_); - std::string content_state = content_state_; - if (has_post_data_) { - content_state = - webkit_glue::RemovePasswordDataFromHistoryState(content_state); - } - WriteStringToPickle(pickle, &bytes_written, max_size, content_state); + content::PageState page_state = page_state_; + if (has_post_data_) + page_state = page_state.RemovePasswordData(); + + WriteStringToPickle(pickle, &bytes_written, max_size, + page_state.ToEncodedData()); pickle->WriteInt(transition_type_); @@ -259,15 +259,16 @@ void SerializedNavigationEntry::WriteToPickle(int max_size, bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) { *this = SerializedNavigationEntry(); - std::string virtual_url_spec; + std::string virtual_url_spec, page_state_data; int transition_type_int = 0; if (!iterator->ReadInt(&index_) || !iterator->ReadString(&virtual_url_spec) || !iterator->ReadString16(&title_) || - !iterator->ReadString(&content_state_) || + !iterator->ReadString(&page_state_data) || !iterator->ReadInt(&transition_type_int)) return false; virtual_url_ = GURL(virtual_url_spec); + page_state_ = content::PageState::CreateFromEncodedData(page_state_data); transition_type_ = static_cast<content::PageTransition>(transition_type_int); // type_mask did not always exist in the written stream. As such, we @@ -333,7 +334,7 @@ scoped_ptr<NavigationEntry> SerializedNavigationEntry::ToNavigationEntry( browser_context)); entry->SetTitle(title_); - entry->SetContentState(content_state_); + entry->SetPageState(page_state_); entry->SetPageID(page_id); entry->SetHasPostData(has_post_data_); entry->SetPostID(post_id_); diff --git a/components/sessions/serialized_navigation_entry.h b/components/sessions/serialized_navigation_entry.h index bc72700..f76642b 100644 --- a/components/sessions/serialized_navigation_entry.h +++ b/components/sessions/serialized_navigation_entry.h @@ -14,6 +14,7 @@ #include "base/string16.h" #include "base/time.h" #include "components/sessions/sessions_export.h" +#include "content/public/common/page_state.h" #include "content/public/common/page_transition_types.h" #include "content/public/common/referrer.h" #include "googleurl/src/gurl.h" @@ -96,7 +97,7 @@ class SESSIONS_EXPORT SerializedNavigationEntry { int unique_id() const { return unique_id_; } const GURL& virtual_url() const { return virtual_url_; } const string16& title() const { return title_; } - const std::string& content_state() const { return content_state_; } + const content::PageState& page_state() const { return page_state_; } const string16& search_terms() const { return search_terms_; } const GURL& favicon_url() const { return favicon_url_; } const content::Referrer& referrer() const { return referrer_; } @@ -139,7 +140,7 @@ class SESSIONS_EXPORT SerializedNavigationEntry { content::Referrer referrer_; GURL virtual_url_; string16 title_; - std::string content_state_; + content::PageState page_state_; content::PageTransition transition_type_; bool has_post_data_; int64 post_id_; diff --git a/components/sessions/serialized_navigation_entry_test_helper.cc b/components/sessions/serialized_navigation_entry_test_helper.cc index 0c26e46..b1e2c00 100644 --- a/components/sessions/serialized_navigation_entry_test_helper.cc +++ b/components/sessions/serialized_navigation_entry_test_helper.cc @@ -21,7 +21,7 @@ void SerializedNavigationEntryTestHelper::ExpectNavigationEquals( EXPECT_EQ(expected.referrer_.policy, actual.referrer_.policy); EXPECT_EQ(expected.virtual_url_, actual.virtual_url_); EXPECT_EQ(expected.title_, actual.title_); - EXPECT_EQ(expected.content_state_, actual.content_state_); + EXPECT_EQ(expected.page_state_, actual.page_state_); EXPECT_EQ(expected.transition_type_, actual.transition_type_); EXPECT_EQ(expected.has_post_data_, actual.has_post_data_); EXPECT_EQ(expected.original_request_url_, actual.original_request_url_); @@ -40,16 +40,17 @@ SerializedNavigationEntry SerializedNavigationEntryTestHelper::CreateNavigation( WebKit::WebReferrerPolicyDefault); navigation.virtual_url_ = GURL(virtual_url); navigation.title_ = UTF8ToUTF16(title); - navigation.content_state_ = "fake_state"; + navigation.page_state_ = + content::PageState::CreateFromEncodedData("fake_state"); navigation.timestamp_ = base::Time::Now(); return navigation; } // static -void SerializedNavigationEntryTestHelper::SetContentState( - const std::string& content_state, +void SerializedNavigationEntryTestHelper::SetPageState( + const content::PageState& page_state, SerializedNavigationEntry* navigation) { - navigation->content_state_ = content_state; + navigation->page_state_ = page_state; } // static diff --git a/components/sessions/serialized_navigation_entry_test_helper.h b/components/sessions/serialized_navigation_entry_test_helper.h index 43b49eb..a653f22 100644 --- a/components/sessions/serialized_navigation_entry_test_helper.h +++ b/components/sessions/serialized_navigation_entry_test_helper.h @@ -17,6 +17,7 @@ class Time; } namespace content { +class PageState; struct Referrer; } @@ -38,8 +39,8 @@ class SerializedNavigationEntryTestHelper { const std::string& virtual_url, const std::string& title); - static void SetContentState(const std::string& content_state, - SerializedNavigationEntry* navigation); + static void SetPageState(const content::PageState& page_state, + SerializedNavigationEntry* navigation); static void SetHasPostData(bool has_post_data, SerializedNavigationEntry* navigation); diff --git a/components/sessions/serialized_navigation_entry_unittest.cc b/components/sessions/serialized_navigation_entry_unittest.cc index 2f439da..f8e5c3f 100644 --- a/components/sessions/serialized_navigation_entry_unittest.cc +++ b/components/sessions/serialized_navigation_entry_unittest.cc @@ -34,7 +34,8 @@ const content::Referrer kReferrer = WebKit::WebReferrerPolicyAlways); const GURL kVirtualURL("http://www.virtual-url.com"); const string16 kTitle = ASCIIToUTF16("title"); -const std::string kContentState = "content state"; +const content::PageState kPageState = + content::PageState::CreateFromEncodedData("page state"); const content::PageTransition kTransitionType = static_cast<content::PageTransition>( content::PAGE_TRANSITION_AUTO_SUBFRAME | @@ -57,7 +58,7 @@ scoped_ptr<content::NavigationEntry> MakeNavigationEntryForTest() { navigation_entry->SetReferrer(kReferrer); navigation_entry->SetVirtualURL(kVirtualURL); navigation_entry->SetTitle(kTitle); - navigation_entry->SetContentState(kContentState); + navigation_entry->SetPageState(kPageState); navigation_entry->SetTransitionType(kTransitionType); navigation_entry->SetHasPostData(kHasPostData); navigation_entry->SetPostID(kPostID); @@ -76,7 +77,7 @@ sync_pb::TabNavigation MakeSyncDataForTest() { sync_data.set_virtual_url(kVirtualURL.spec()); sync_data.set_referrer(kReferrer.url.spec()); sync_data.set_title(UTF16ToUTF8(kTitle)); - sync_data.set_state(kContentState); + sync_data.set_state(kPageState.ToEncodedData()); sync_data.set_page_transition( sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME); sync_data.set_unique_id(kUniqueID); @@ -98,7 +99,7 @@ TEST(SerializedNavigationEntryTest, DefaultInitializer) { EXPECT_EQ(WebKit::WebReferrerPolicyDefault, navigation.referrer().policy); EXPECT_EQ(GURL(), navigation.virtual_url()); EXPECT_TRUE(navigation.title().empty()); - EXPECT_TRUE(navigation.content_state().empty()); + EXPECT_FALSE(navigation.page_state().IsValid()); EXPECT_EQ(content::PAGE_TRANSITION_TYPED, navigation.transition_type()); EXPECT_FALSE(navigation.has_post_data()); EXPECT_EQ(-1, navigation.post_id()); @@ -125,7 +126,7 @@ TEST(SerializedNavigationEntryTest, FromNavigationEntry) { EXPECT_EQ(kReferrer.policy, navigation.referrer().policy); EXPECT_EQ(kVirtualURL, navigation.virtual_url()); EXPECT_EQ(kTitle, navigation.title()); - EXPECT_EQ(kContentState, navigation.content_state()); + EXPECT_EQ(kPageState, navigation.page_state()); EXPECT_EQ(kTransitionType, navigation.transition_type()); EXPECT_EQ(kHasPostData, navigation.has_post_data()); EXPECT_EQ(kPostID, navigation.post_id()); @@ -150,7 +151,7 @@ TEST(SerializedNavigationEntryTest, FromSyncData) { EXPECT_EQ(WebKit::WebReferrerPolicyDefault, navigation.referrer().policy); EXPECT_EQ(kVirtualURL, navigation.virtual_url()); EXPECT_EQ(kTitle, navigation.title()); - EXPECT_EQ(kContentState, navigation.content_state()); + EXPECT_EQ(kPageState, navigation.page_state()); EXPECT_EQ(kTransitionType, navigation.transition_type()); EXPECT_FALSE(navigation.has_post_data()); EXPECT_EQ(-1, navigation.post_id()); @@ -183,7 +184,7 @@ TEST(SerializedNavigationEntryTest, Pickle) { EXPECT_EQ(kReferrer.policy, new_navigation.referrer().policy); EXPECT_EQ(kVirtualURL, new_navigation.virtual_url()); EXPECT_EQ(kTitle, new_navigation.title()); - EXPECT_TRUE(new_navigation.content_state().empty()); + EXPECT_FALSE(new_navigation.page_state().IsValid()); EXPECT_EQ(kTransitionType, new_navigation.transition_type()); EXPECT_EQ(kHasPostData, new_navigation.has_post_data()); EXPECT_EQ(-1, new_navigation.post_id()); @@ -212,7 +213,7 @@ TEST(SerializedNavigationEntryTest, ToNavigationEntry) { EXPECT_EQ(kReferrer.policy, new_navigation_entry->GetReferrer().policy); EXPECT_EQ(kVirtualURL, new_navigation_entry->GetVirtualURL()); EXPECT_EQ(kTitle, new_navigation_entry->GetTitle()); - EXPECT_EQ(kContentState, new_navigation_entry->GetContentState()); + EXPECT_EQ(kPageState, new_navigation_entry->GetPageState()); EXPECT_EQ(kPageID, new_navigation_entry->GetPageID()); EXPECT_EQ(content::PAGE_TRANSITION_RELOAD, new_navigation_entry->GetTransitionType()); |