| 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 54ec8ba501498994d9985e1c0d7769891708564e..6fbcd2bac3ded415f6dc9d521c3e928544f2feea 100644
|
| --- a/chrome/browser/sessions/base_session_service.cc
|
| +++ b/chrome/browser/sessions/base_session_service.cc
|
| @@ -187,9 +187,11 @@ SessionCommand* BaseSessionService::CreateUpdateTabNavigationCommand(
|
| entry.GetReferrer().url.spec() : std::string());
|
| pickle.WriteInt(entry.GetReferrer().policy);
|
|
|
| + // Save info required to override the user agent.
|
| WriteStringToPickle(pickle, &bytes_written, max_state_size,
|
| entry.GetOriginalRequestURL().is_valid() ?
|
| entry.GetOriginalRequestURL().spec() : std::string());
|
| + pickle.WriteBool(entry.GetIsOverridingUserAgent());
|
|
|
| return new SessionCommand(command_id, pickle);
|
| }
|
| @@ -213,6 +215,27 @@ SessionCommand* BaseSessionService::CreateSetTabExtensionAppIDCommand(
|
| return new SessionCommand(command_id, pickle);
|
| }
|
|
|
| +SessionCommand* BaseSessionService::CreateSetTabUserAgentOverrideCommand(
|
| + SessionID::id_type command_id,
|
| + SessionID::id_type tab_id,
|
| + const std::string& user_agent_override) {
|
| + // Use pickle to handle marshalling.
|
| + Pickle pickle;
|
| + pickle.WriteInt(tab_id);
|
| +
|
| + // Enforce a max for the user agent length. They should never be anywhere
|
| + // near this size.
|
| + static const SessionCommand::size_type max_user_agent_size =
|
| + std::numeric_limits<SessionCommand::size_type>::max() - 1024;
|
| +
|
| + int bytes_written = 0;
|
| +
|
| + WriteStringToPickle(pickle, &bytes_written, max_user_agent_size,
|
| + user_agent_override);
|
| +
|
| + return new SessionCommand(command_id, pickle);
|
| +}
|
| +
|
| SessionCommand* BaseSessionService::CreateSetWindowAppNameCommand(
|
| SessionID::id_type command_id,
|
| SessionID::id_type window_id,
|
| @@ -275,6 +298,12 @@ bool BaseSessionService::RestoreUpdateTabNavigationCommand(
|
| if (!pickle->ReadString(&iterator, &url_spec))
|
| url_spec = std::string();
|
| navigation->set_original_request_url(GURL(url_spec));
|
| +
|
| + // Default to not overriding the user agent if we don't have info.
|
| + bool override_user_agent;
|
| + if (!pickle->ReadBool(&iterator, &override_user_agent))
|
| + override_user_agent = false;
|
| + navigation->set_is_overriding_user_agent(override_user_agent);
|
| }
|
|
|
| navigation->virtual_url_ = GURL(url_spec);
|
| @@ -294,6 +323,19 @@ bool BaseSessionService::RestoreSetTabExtensionAppIDCommand(
|
| pickle->ReadString(&iterator, extension_app_id);
|
| }
|
|
|
| +bool BaseSessionService::RestoreSetTabUserAgentOverrideCommand(
|
| + const SessionCommand& command,
|
| + SessionID::id_type* tab_id,
|
| + std::string* user_agent_override) {
|
| + scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
|
| + if (!pickle.get())
|
| + return false;
|
| +
|
| + PickleIterator iterator(*pickle);
|
| + return pickle->ReadInt(&iterator, tab_id) &&
|
| + pickle->ReadString(&iterator, user_agent_override);
|
| +}
|
| +
|
| bool BaseSessionService::RestoreSetWindowAppNameCommand(
|
| const SessionCommand& command,
|
| SessionID::id_type* window_id,
|
|
|