summaryrefslogtreecommitdiff
path: root/chromium/components/sessions
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-09-18 14:34:04 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-10-04 11:15:27 +0000
commite6430e577f105ad8813c92e75c54660c4985026e (patch)
tree88115e5d1fb471fea807111924dcccbeadbf9e4f /chromium/components/sessions
parent53d399fe6415a96ea6986ec0d402a9c07da72453 (diff)
downloadqtwebengine-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')
-rw-r--r--chromium/components/sessions/BUILD.gn3
-rw-r--r--chromium/components/sessions/content/content_serialized_navigation_builder.cc6
-rw-r--r--chromium/components/sessions/content/content_serialized_navigation_builder.h16
-rw-r--r--chromium/components/sessions/content/content_serialized_navigation_builder_unittest.cc20
-rw-r--r--chromium/components/sessions/content/content_serialized_navigation_driver.cc44
-rw-r--r--chromium/components/sessions/content/content_serialized_navigation_driver.h4
-rw-r--r--chromium/components/sessions/core/base_session_service.cc2
-rw-r--r--chromium/components/sessions/core/serialized_navigation_driver.h12
-rw-r--r--chromium/components/sessions/core/serialized_navigation_entry.cc57
-rw-r--r--chromium/components/sessions/ios/ios_serialized_navigation_builder_unittest.mm4
-rw-r--r--chromium/components/sessions/ios/ios_serialized_navigation_driver.cc72
-rw-r--r--chromium/components/sessions/ios/ios_serialized_navigation_driver.h4
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;