diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-09-18 14:34:04 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-10-04 11:15:27 +0000 |
commit | e6430e577f105ad8813c92e75c54660c4985026e (patch) | |
tree | 88115e5d1fb471fea807111924dcccbeadbf9e4f /chromium/components/sessions | |
parent | 53d399fe6415a96ea6986ec0d402a9c07da72453 (diff) | |
download | qtwebengine-chromium-e6430e577f105ad8813c92e75c54660c4985026e.tar.gz |
BASELINE: Update Chromium to 61.0.3163.99
Change-Id: I8452f34574d88ca2b27af9bd56fc9ff3f16b1367
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/components/sessions')
12 files changed, 67 insertions, 177 deletions
diff --git a/chromium/components/sessions/BUILD.gn b/chromium/components/sessions/BUILD.gn index fc20eacf6da..5ec556c3e16 100644 --- a/chromium/components/sessions/BUILD.gn +++ b/chromium/components/sessions/BUILD.gn @@ -159,6 +159,9 @@ static_library("test_support") { } source_set("unit_tests") { + if (is_ios) { + configs += [ "//build/config/compiler:enable_arc" ] + } testonly = true sources = [ "core/serialized_navigation_entry_unittest.cc", diff --git a/chromium/components/sessions/content/content_serialized_navigation_builder.cc b/chromium/components/sessions/content/content_serialized_navigation_builder.cc index 7acfa8ba572..94f20a05b96 100644 --- a/chromium/components/sessions/content/content_serialized_navigation_builder.cc +++ b/chromium/components/sessions/content/content_serialized_navigation_builder.cc @@ -22,7 +22,8 @@ namespace sessions { SerializedNavigationEntry ContentSerializedNavigationBuilder::FromNavigationEntry( int index, - const content::NavigationEntry& entry) { + const content::NavigationEntry& entry, + SerializationOptions serialization_options) { SerializedNavigationEntry navigation; navigation.index_ = index; navigation.unique_id_ = entry.GetUniqueID(); @@ -30,7 +31,8 @@ ContentSerializedNavigationBuilder::FromNavigationEntry( navigation.referrer_policy_ = entry.GetReferrer().policy; navigation.virtual_url_ = entry.GetVirtualURL(); navigation.title_ = entry.GetTitle(); - navigation.encoded_page_state_ = entry.GetPageState().ToEncodedData(); + if (!(serialization_options & SerializationOptions::EXCLUDE_PAGE_STATE)) + navigation.encoded_page_state_ = entry.GetPageState().ToEncodedData(); navigation.transition_type_ = entry.GetTransitionType(); navigation.has_post_data_ = entry.GetHasPostData(); navigation.post_id_ = entry.GetPostID(); diff --git a/chromium/components/sessions/content/content_serialized_navigation_builder.h b/chromium/components/sessions/content/content_serialized_navigation_builder.h index b8cd76d58cb..ebb9afb0e94 100644 --- a/chromium/components/sessions/content/content_serialized_navigation_builder.h +++ b/chromium/components/sessions/content/content_serialized_navigation_builder.h @@ -22,11 +22,25 @@ class SerializedNavigationEntry; // classes. class SESSIONS_EXPORT ContentSerializedNavigationBuilder { public: + // Set of options for serializing a navigation. Multiple options can be + // combined by bit masking. + enum SerializationOptions { + // Serialized all available navigation data. + DEFAULT = 0x0, + + // Exclude page state data. Serializing page state data can involve heavy + // processing on pages with deep iframe trees, so should be avoided if not + // necessary. + EXCLUDE_PAGE_STATE = 0x1, + }; + // Construct a SerializedNavigationEntry for a particular index from the given // NavigationEntry. static SerializedNavigationEntry FromNavigationEntry( int index, - const content::NavigationEntry& entry); + const content::NavigationEntry& entry, + SerializationOptions serialization_options = + SerializationOptions::DEFAULT); // Convert the given SerializedNavigationEntry into a NavigationEntry with the // given context. The NavigationEntry will have a transition type of diff --git a/chromium/components/sessions/content/content_serialized_navigation_builder_unittest.cc b/chromium/components/sessions/content/content_serialized_navigation_builder_unittest.cc index 585c41d9a46..45f365a2416 100644 --- a/chromium/components/sessions/content/content_serialized_navigation_builder_unittest.cc +++ b/chromium/components/sessions/content/content_serialized_navigation_builder_unittest.cc @@ -161,6 +161,26 @@ TEST_F(ContentSerializedNavigationBuilderTest, FromNavigationEntry) { navigation.extended_info_map().at(kExtendedInfoKey2)); } +// Test effect of the navigation serialization options. +TEST_F(ContentSerializedNavigationBuilderTest, + FromNavigationEntrySerializationOptions) { + const std::unique_ptr<content::NavigationEntry> navigation_entry( + MakeNavigationEntryForTest()); + + const SerializedNavigationEntry& default_navigation = + ContentSerializedNavigationBuilder::FromNavigationEntry( + test_data::kIndex, *navigation_entry, + ContentSerializedNavigationBuilder::DEFAULT); + EXPECT_EQ(test_data::kEncodedPageState, + default_navigation.encoded_page_state()); + + const SerializedNavigationEntry& excluded_page_state_navigation = + ContentSerializedNavigationBuilder::FromNavigationEntry( + test_data::kIndex, *navigation_entry, + ContentSerializedNavigationBuilder::EXCLUDE_PAGE_STATE); + EXPECT_TRUE(excluded_page_state_navigation.encoded_page_state().empty()); +} + // Create a NavigationEntry, then create another one by converting to // a SerializedNavigationEntry and back. The new one should match the old one // except for fields that aren't preserved, which should be set to diff --git a/chromium/components/sessions/content/content_serialized_navigation_driver.cc b/chromium/components/sessions/content/content_serialized_navigation_driver.cc index 20ec2d02090..abf02b4862e 100644 --- a/chromium/components/sessions/content/content_serialized_navigation_driver.cc +++ b/chromium/components/sessions/content/content_serialized_navigation_driver.cc @@ -15,11 +15,6 @@ namespace sessions { namespace { -const int kObsoleteReferrerPolicyAlways = 0; -const int kObsoleteReferrerPolicyDefault = 1; -const int kObsoleteReferrerPolicyNever = 2; -const int kObsoleteReferrerPolicyOrigin = 3; - ContentSerializedNavigationDriver* g_instance = nullptr; } // namespace @@ -59,45 +54,6 @@ int ContentSerializedNavigationDriver::GetDefaultReferrerPolicy() const { return blink::kWebReferrerPolicyDefault; } -bool ContentSerializedNavigationDriver::MapReferrerPolicyToOldValues( - int referrer_policy, - int* mapped_referrer_policy) const { - switch (referrer_policy) { - case blink::kWebReferrerPolicyAlways: - case blink::kWebReferrerPolicyDefault: - // "always" and "default" are the same value in all versions. - *mapped_referrer_policy = referrer_policy; - return true; - - case blink::kWebReferrerPolicyOrigin: - // "origin" exists in the old encoding. - *mapped_referrer_policy = kObsoleteReferrerPolicyOrigin; - return true; - - default: - // Everything else is mapped to never. - *mapped_referrer_policy = kObsoleteReferrerPolicyNever; - return false; - } -} - -bool ContentSerializedNavigationDriver::MapReferrerPolicyToNewValues( - int referrer_policy, - int* mapped_referrer_policy) const { - switch (referrer_policy) { - case kObsoleteReferrerPolicyAlways: - case kObsoleteReferrerPolicyDefault: - // "always" and "default" are the same value in all versions. - *mapped_referrer_policy = referrer_policy; - return true; - - default: - // Since we don't know what encoding was used, we map the rest to "never". - *mapped_referrer_policy = blink::kWebReferrerPolicyNever; - return false; - } -} - std::string ContentSerializedNavigationDriver::GetSanitizedPageStateForPickle( const SerializedNavigationEntry* navigation) const { diff --git a/chromium/components/sessions/content/content_serialized_navigation_driver.h b/chromium/components/sessions/content/content_serialized_navigation_driver.h index ec732a70766..82a9b81aa50 100644 --- a/chromium/components/sessions/content/content_serialized_navigation_driver.h +++ b/chromium/components/sessions/content/content_serialized_navigation_driver.h @@ -36,10 +36,6 @@ class SESSIONS_EXPORT ContentSerializedNavigationDriver // SerializedNavigationDriver implementation. int GetDefaultReferrerPolicy() const override; - bool MapReferrerPolicyToOldValues(int referrer_policy, - int* mapped_referrer_policy) const override; - bool MapReferrerPolicyToNewValues(int referrer_policy, - int* mapped_referrer_policy) const override; std::string GetSanitizedPageStateForPickle( const SerializedNavigationEntry* navigation) const override; void Sanitize(SerializedNavigationEntry* navigation) const override; diff --git a/chromium/components/sessions/core/base_session_service.cc b/chromium/components/sessions/core/base_session_service.cc index 21726d042bd..e40809f472a 100644 --- a/chromium/components/sessions/core/base_session_service.cc +++ b/chromium/components/sessions/core/base_session_service.cc @@ -34,7 +34,7 @@ void PostOrRunInternalGetCommandsCallback( base::TaskRunner* task_runner, const BaseSessionService::GetCommandsCallback& callback, std::vector<std::unique_ptr<SessionCommand>> commands) { - if (task_runner->RunsTasksOnCurrentThread()) { + if (task_runner->RunsTasksInCurrentSequence()) { callback.Run(std::move(commands)); } else { task_runner->PostTask(FROM_HERE, diff --git a/chromium/components/sessions/core/serialized_navigation_driver.h b/chromium/components/sessions/core/serialized_navigation_driver.h index 74bbfefe1cb..2a9f74f8230 100644 --- a/chromium/components/sessions/core/serialized_navigation_driver.h +++ b/chromium/components/sessions/core/serialized_navigation_driver.h @@ -24,18 +24,6 @@ class SESSIONS_EXPORT SerializedNavigationDriver { // Returns the default referrer policy. virtual int GetDefaultReferrerPolicy() const = 0; - // Maps current referrer policies to old values to work around - // crbug.com/450589. Returns false if the referrer should be stripped. - virtual bool MapReferrerPolicyToOldValues( - int referrer_policy, - int* mapped_referrer_policy) const = 0; - - // Sanitizes a referrer policy that might either be in the old or the new - // format. Returns false if the referrer should be stripped. - virtual bool MapReferrerPolicyToNewValues( - int referrer_policy, - int* mapped_referrer_policy) const = 0; - // Returns a sanitized version of the given |navigation|'s encoded_page_state // suitable for writing to disk. virtual std::string GetSanitizedPageStateForPickle( diff --git a/chromium/components/sessions/core/serialized_navigation_entry.cc b/chromium/components/sessions/core/serialized_navigation_entry.cc index ca686b0add4..3dda4ae452b 100644 --- a/chromium/components/sessions/core/serialized_navigation_entry.cc +++ b/chromium/components/sessions/core/serialized_navigation_entry.cc @@ -6,6 +6,7 @@ #include <stddef.h> +#include "base/macros.h" #include "base/pickle.h" #include "base/strings/utf_string_conversions.h" #include "base/trace_event/memory_usage_estimator.h" @@ -18,6 +19,9 @@ namespace sessions { // TODO(treib): Remove, not needed anymore. crbug.com/627747 const char kSearchTermsKey[] = "search_terms"; +// The previous referrer policy value corresponding to |Never|. +const int kObsoleteReferrerPolicyNever = 2; + SerializedNavigationEntry::SerializedNavigationEntry() : index_(-1), unique_id_(0), @@ -48,14 +52,8 @@ SerializedNavigationEntry SerializedNavigationEntry::FromSyncData( navigation.referrer_url_ = GURL(sync_data.referrer()); navigation.referrer_policy_ = sync_data.correct_referrer_policy(); } else { - int mapped_referrer_policy; - if (SerializedNavigationDriver::Get()->MapReferrerPolicyToNewValues( - sync_data.obsolete_referrer_policy(), &mapped_referrer_policy)) { - navigation.referrer_url_ = GURL(sync_data.referrer()); - } else { - navigation.referrer_url_ = GURL(); - } - navigation.referrer_policy_ = mapped_referrer_policy; + navigation.referrer_url_ = GURL(); + navigation.referrer_policy_ = kObsoleteReferrerPolicyNever; } navigation.virtual_url_ = GURL(sync_data.virtual_url()); navigation.title_ = base::UTF8ToUTF16(sync_data.title()); @@ -236,15 +234,11 @@ void SerializedNavigationEntry::WriteToPickle(int max_size, const int type_mask = has_post_data_ ? HAS_POST_DATA : 0; pickle->WriteInt(type_mask); - int mapped_referrer_policy; - if (SerializedNavigationDriver::Get()->MapReferrerPolicyToOldValues( - referrer_policy_, &mapped_referrer_policy) && - referrer_url_.is_valid()) { - WriteStringToPickle(pickle, &bytes_written, max_size, referrer_url_.spec()); - } else { - WriteStringToPickle(pickle, &bytes_written, max_size, std::string()); - } - pickle->WriteInt(mapped_referrer_policy); + WriteStringToPickle(pickle, &bytes_written, max_size, referrer_url_.spec()); + + // This field was deprecated in m61, but we still write it to the pickle for + // forwards compatibility. + pickle->WriteInt(kObsoleteReferrerPolicyNever); // Save info required to override the user agent. WriteStringToPickle( @@ -294,15 +288,11 @@ bool SerializedNavigationEntry::ReadFromPickle(base::PickleIterator* iterator) { referrer_spec = std::string(); referrer_url_ = GURL(referrer_spec); - // The "referrer policy" property was added even later, so we fall back to - // the default policy if the property is not present. - // - // Note: due to crbug.com/450589 this value might be incorrect, and a - // corrected version is stored later in the pickle. - if (!iterator->ReadInt(&referrer_policy_)) { - referrer_policy_ = - SerializedNavigationDriver::Get()->GetDefaultReferrerPolicy(); - } + // Note: due to crbug.com/450589 the initial referrer policy is incorrect, + // and ignored. A correct referrer policy is extracted later (see + // |correct_referrer_policy| below). + int ignored_referrer_policy; + ignore_result(iterator->ReadInt(&ignored_referrer_policy)); // If the original URL can't be found, leave it empty. std::string original_request_url_spec; @@ -333,12 +323,6 @@ bool SerializedNavigationEntry::ReadFromPickle(base::PickleIterator* iterator) { if (iterator->ReadInt(&correct_referrer_policy)) { referrer_policy_ = correct_referrer_policy; } else { - int mapped_referrer_policy; - if (!SerializedNavigationDriver::Get()->MapReferrerPolicyToNewValues( - referrer_policy_, &mapped_referrer_policy)) { - referrer_url_ = GURL(); - } - referrer_policy_ = mapped_referrer_policy; encoded_page_state_ = SerializedNavigationDriver::Get()->StripReferrerFromPageState( encoded_page_state_); @@ -368,14 +352,7 @@ bool SerializedNavigationEntry::ReadFromPickle(base::PickleIterator* iterator) { sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const { sync_pb::TabNavigation sync_data; sync_data.set_virtual_url(virtual_url_.spec()); - int mapped_referrer_policy; - if (SerializedNavigationDriver::Get()->MapReferrerPolicyToOldValues( - referrer_policy_, &mapped_referrer_policy)) { - sync_data.set_referrer(referrer_url_.spec()); - } else { - sync_data.set_referrer(std::string()); - } - sync_data.set_obsolete_referrer_policy(mapped_referrer_policy); + sync_data.set_referrer(referrer_url_.spec()); sync_data.set_correct_referrer_policy(referrer_policy_); sync_data.set_title(base::UTF16ToUTF8(title_)); diff --git a/chromium/components/sessions/ios/ios_serialized_navigation_builder_unittest.mm b/chromium/components/sessions/ios/ios_serialized_navigation_builder_unittest.mm index c119b54745e..da0dcb61b4a 100644 --- a/chromium/components/sessions/ios/ios_serialized_navigation_builder_unittest.mm +++ b/chromium/components/sessions/ios/ios_serialized_navigation_builder_unittest.mm @@ -11,6 +11,10 @@ #include "ios/web/public/referrer.h" #include "testing/gtest/include/gtest/gtest.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace sessions { namespace { diff --git a/chromium/components/sessions/ios/ios_serialized_navigation_driver.cc b/chromium/components/sessions/ios/ios_serialized_navigation_driver.cc index ba195b52d15..5c53c21a898 100644 --- a/chromium/components/sessions/ios/ios_serialized_navigation_driver.cc +++ b/chromium/components/sessions/ios/ios_serialized_navigation_driver.cc @@ -7,16 +7,10 @@ #include "base/memory/singleton.h" #include "components/sessions/core/serialized_navigation_entry.h" #include "ios/web/public/referrer.h" +#include "ios/web/public/referrer_util.h" namespace sessions { -namespace { -const int kObsoleteReferrerPolicyAlways = 0; -const int kObsoleteReferrerPolicyDefault = 1; -const int kObsoleteReferrerPolicyNever = 2; -const int kObsoleteReferrerPolicyOrigin = 3; -} // namespace - // static SerializedNavigationDriver* SerializedNavigationDriver::Get() { return IOSSerializedNavigationDriver::GetInstance(); @@ -40,45 +34,6 @@ int IOSSerializedNavigationDriver::GetDefaultReferrerPolicy() const { return web::ReferrerPolicyDefault; } -bool IOSSerializedNavigationDriver::MapReferrerPolicyToOldValues( - int referrer_policy, - int* mapped_referrer_policy) const { - switch (referrer_policy) { - case web::ReferrerPolicyAlways: - case web::ReferrerPolicyDefault: - // "always" and "default" are the same value in all versions. - *mapped_referrer_policy = referrer_policy; - return true; - - case web::ReferrerPolicyOrigin: - // "origin" exists in the old encoding. - *mapped_referrer_policy = kObsoleteReferrerPolicyOrigin; - return true; - - default: - // Everything else is mapped to never. - *mapped_referrer_policy = kObsoleteReferrerPolicyNever; - return false; - } -} - -bool IOSSerializedNavigationDriver::MapReferrerPolicyToNewValues( - int referrer_policy, - int* mapped_referrer_policy) const { - switch (referrer_policy) { - case kObsoleteReferrerPolicyAlways: - case kObsoleteReferrerPolicyDefault: - // "always" and "default" are the same value in all versions. - *mapped_referrer_policy = referrer_policy; - return true; - - default: - // Since we don't know what encoding was used, we map the rest to "never". - *mapped_referrer_policy = web::ReferrerPolicyNever; - return false; - } -} - std::string IOSSerializedNavigationDriver::GetSanitizedPageStateForPickle( const SerializedNavigationEntry* navigation) const { @@ -99,29 +54,8 @@ void IOSSerializedNavigationDriver::Sanitize( NOTREACHED(); referrer.policy = web::ReferrerPolicyNever; } - bool is_downgrade = referrer.url.SchemeIsCryptographic() && - !navigation->virtual_url_.SchemeIsCryptographic(); - switch (referrer.policy) { - case web::ReferrerPolicyDefault: - if (is_downgrade) - referrer.url = GURL(); - break; - case web::ReferrerPolicyNoReferrerWhenDowngrade: - if (is_downgrade) - referrer.url = GURL(); - case web::ReferrerPolicyAlways: - break; - case web::ReferrerPolicyNever: - referrer.url = GURL(); - break; - case web::ReferrerPolicyOrigin: - referrer.url = referrer.url.GetOrigin(); - break; - case web::ReferrerPolicyOriginWhenCrossOrigin: - if (navigation->virtual_url_.GetOrigin() != referrer.url.GetOrigin()) - referrer.url = referrer.url.GetOrigin(); - break; - } + referrer.url = GURL( + ReferrerHeaderValueForNavigation(navigation->virtual_url_, referrer)); } // Reset the referrer if it has changed. diff --git a/chromium/components/sessions/ios/ios_serialized_navigation_driver.h b/chromium/components/sessions/ios/ios_serialized_navigation_driver.h index 7982ad3145e..a589585eadc 100644 --- a/chromium/components/sessions/ios/ios_serialized_navigation_driver.h +++ b/chromium/components/sessions/ios/ios_serialized_navigation_driver.h @@ -26,10 +26,6 @@ class IOSSerializedNavigationDriver // SerializedNavigationDriver implementation. int GetDefaultReferrerPolicy() const override; - bool MapReferrerPolicyToOldValues(int referrer_policy, - int* mapped_referrer_policy) const override; - bool MapReferrerPolicyToNewValues(int referrer_policy, - int* mapped_referrer_policy) const override; std::string GetSanitizedPageStateForPickle( const SerializedNavigationEntry* navigation) const override; void Sanitize(SerializedNavigationEntry* navigation) const override; |