| Index: chrome/browser/sessions/base_session_service.cc
|
| diff --git a/chrome/browser/sessions/base_session_service.cc b/chrome/browser/sessions/base_session_service.cc
|
| index 93e0826464290c4da560d90145e20ef970bb8a9a..36edcec6a3fba1c758454fa90ee5b2bf07fed5dd 100644
|
| --- a/chrome/browser/sessions/base_session_service.cc
|
| +++ b/chrome/browser/sessions/base_session_service.cc
|
| @@ -14,8 +14,11 @@
|
| #include "chrome/browser/sessions/session_types.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "content/browser/tab_contents/navigation_entry.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebReferrerPolicy.h"
|
| #include "webkit/glue/webkit_glue.h"
|
|
|
| +using WebKit::WebReferrerPolicy;
|
| +
|
| // InternalGetCommandsRequest -------------------------------------------------
|
|
|
| BaseSessionService::InternalGetCommandsRequest::~InternalGetCommandsRequest() {
|
| @@ -178,7 +181,9 @@ SessionCommand* BaseSessionService::CreateUpdateTabNavigationCommand(
|
| pickle.WriteInt(type_mask);
|
|
|
| WriteStringToPickle(pickle, &bytes_written, max_state_size,
|
| - entry.referrer().is_valid() ? entry.referrer().spec() : std::string());
|
| + entry.referrer().url.is_valid() ?
|
| + entry.referrer().url.spec() : std::string());
|
| + pickle.WriteInt(entry.referrer().policy);
|
|
|
| // Adding more data? Be sure and update TabRestoreService too.
|
| return new SessionCommand(command_id, pickle);
|
| @@ -229,8 +234,17 @@ bool BaseSessionService::RestoreUpdateTabNavigationCommand(
|
| // stream. As such, we don't fail if it can't be read.
|
| std::string referrer_spec;
|
| pickle->ReadString(&iterator, &referrer_spec);
|
| - if (!referrer_spec.empty())
|
| - navigation->referrer_ = 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.
|
| + int policy_int;
|
| + WebReferrerPolicy policy;
|
| + if (pickle->ReadInt(&iterator, &policy_int))
|
| + policy = static_cast<WebReferrerPolicy>(policy_int);
|
| + else
|
| + policy = WebKit::WebReferrerPolicyDefault;
|
| + navigation->referrer_ = content::Referrer(
|
| + referrer_spec.empty() ? GURL() : GURL(referrer_spec),
|
| + policy);
|
| }
|
|
|
| navigation->virtual_url_ = GURL(url_spec);
|
|
|