| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/sessions/base_session_service.h" | 5 #include "chrome/browser/sessions/base_session_service.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/pickle.h" | 9 #include "base/pickle.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 | 180 |
| 181 pickle.WriteInt(entry.GetTransitionType()); | 181 pickle.WriteInt(entry.GetTransitionType()); |
| 182 int type_mask = entry.GetHasPostData() ? TabNavigation::HAS_POST_DATA : 0; | 182 int type_mask = entry.GetHasPostData() ? TabNavigation::HAS_POST_DATA : 0; |
| 183 pickle.WriteInt(type_mask); | 183 pickle.WriteInt(type_mask); |
| 184 | 184 |
| 185 WriteStringToPickle(pickle, &bytes_written, max_state_size, | 185 WriteStringToPickle(pickle, &bytes_written, max_state_size, |
| 186 entry.GetReferrer().url.is_valid() ? | 186 entry.GetReferrer().url.is_valid() ? |
| 187 entry.GetReferrer().url.spec() : std::string()); | 187 entry.GetReferrer().url.spec() : std::string()); |
| 188 pickle.WriteInt(entry.GetReferrer().policy); | 188 pickle.WriteInt(entry.GetReferrer().policy); |
| 189 | 189 |
| 190 // Save info required to override the user agent. |
| 190 WriteStringToPickle(pickle, &bytes_written, max_state_size, | 191 WriteStringToPickle(pickle, &bytes_written, max_state_size, |
| 191 entry.GetOriginalRequestURL().is_valid() ? | 192 entry.GetOriginalRequestURL().is_valid() ? |
| 192 entry.GetOriginalRequestURL().spec() : std::string()); | 193 entry.GetOriginalRequestURL().spec() : std::string()); |
| 194 pickle.WriteBool(entry.GetIsOverridingUserAgent()); |
| 193 | 195 |
| 194 return new SessionCommand(command_id, pickle); | 196 return new SessionCommand(command_id, pickle); |
| 195 } | 197 } |
| 196 | 198 |
| 197 SessionCommand* BaseSessionService::CreateSetTabExtensionAppIDCommand( | 199 SessionCommand* BaseSessionService::CreateSetTabExtensionAppIDCommand( |
| 198 SessionID::id_type command_id, | 200 SessionID::id_type command_id, |
| 199 SessionID::id_type tab_id, | 201 SessionID::id_type tab_id, |
| 200 const std::string& extension_id) { | 202 const std::string& extension_id) { |
| 201 // Use pickle to handle marshalling. | 203 // Use pickle to handle marshalling. |
| 202 Pickle pickle; | 204 Pickle pickle; |
| 203 pickle.WriteInt(tab_id); | 205 pickle.WriteInt(tab_id); |
| 204 | 206 |
| 205 // Enforce a max for ids. They should never be anywhere near this size. | 207 // Enforce a max for ids. They should never be anywhere near this size. |
| 206 static const SessionCommand::size_type max_id_size = | 208 static const SessionCommand::size_type max_id_size = |
| 207 std::numeric_limits<SessionCommand::size_type>::max() - 1024; | 209 std::numeric_limits<SessionCommand::size_type>::max() - 1024; |
| 208 | 210 |
| 209 int bytes_written = 0; | 211 int bytes_written = 0; |
| 210 | 212 |
| 211 WriteStringToPickle(pickle, &bytes_written, max_id_size, extension_id); | 213 WriteStringToPickle(pickle, &bytes_written, max_id_size, extension_id); |
| 212 | 214 |
| 213 return new SessionCommand(command_id, pickle); | 215 return new SessionCommand(command_id, pickle); |
| 214 } | 216 } |
| 215 | 217 |
| 218 SessionCommand* BaseSessionService::CreateSetTabUserAgentOverrideCommand( |
| 219 SessionID::id_type command_id, |
| 220 SessionID::id_type tab_id, |
| 221 const std::string& user_agent_override) { |
| 222 // Use pickle to handle marshalling. |
| 223 Pickle pickle; |
| 224 pickle.WriteInt(tab_id); |
| 225 |
| 226 // Enforce a max for the user agent length. They should never be anywhere |
| 227 // near this size. |
| 228 static const SessionCommand::size_type max_user_agent_size = |
| 229 std::numeric_limits<SessionCommand::size_type>::max() - 1024; |
| 230 |
| 231 int bytes_written = 0; |
| 232 |
| 233 WriteStringToPickle(pickle, &bytes_written, max_user_agent_size, |
| 234 user_agent_override); |
| 235 |
| 236 return new SessionCommand(command_id, pickle); |
| 237 } |
| 238 |
| 216 SessionCommand* BaseSessionService::CreateSetWindowAppNameCommand( | 239 SessionCommand* BaseSessionService::CreateSetWindowAppNameCommand( |
| 217 SessionID::id_type command_id, | 240 SessionID::id_type command_id, |
| 218 SessionID::id_type window_id, | 241 SessionID::id_type window_id, |
| 219 const std::string& app_name) { | 242 const std::string& app_name) { |
| 220 // Use pickle to handle marshalling. | 243 // Use pickle to handle marshalling. |
| 221 Pickle pickle; | 244 Pickle pickle; |
| 222 pickle.WriteInt(window_id); | 245 pickle.WriteInt(window_id); |
| 223 | 246 |
| 224 // Enforce a max for ids. They should never be anywhere near this size. | 247 // Enforce a max for ids. They should never be anywhere near this size. |
| 225 static const SessionCommand::size_type max_id_size = | 248 static const SessionCommand::size_type max_id_size = |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 policy = WebKit::WebReferrerPolicyDefault; | 291 policy = WebKit::WebReferrerPolicyDefault; |
| 269 navigation->referrer_ = content::Referrer( | 292 navigation->referrer_ = content::Referrer( |
| 270 referrer_spec.empty() ? GURL() : GURL(referrer_spec), | 293 referrer_spec.empty() ? GURL() : GURL(referrer_spec), |
| 271 policy); | 294 policy); |
| 272 | 295 |
| 273 // If the original URL can't be found, leave it empty. | 296 // If the original URL can't be found, leave it empty. |
| 274 std::string url_spec; | 297 std::string url_spec; |
| 275 if (!pickle->ReadString(&iterator, &url_spec)) | 298 if (!pickle->ReadString(&iterator, &url_spec)) |
| 276 url_spec = std::string(); | 299 url_spec = std::string(); |
| 277 navigation->set_original_request_url(GURL(url_spec)); | 300 navigation->set_original_request_url(GURL(url_spec)); |
| 301 |
| 302 // Default to not overriding the user agent if we don't have info. |
| 303 bool override_user_agent; |
| 304 if (!pickle->ReadBool(&iterator, &override_user_agent)) |
| 305 override_user_agent = false; |
| 306 navigation->set_is_overriding_user_agent(override_user_agent); |
| 278 } | 307 } |
| 279 | 308 |
| 280 navigation->virtual_url_ = GURL(url_spec); | 309 navigation->virtual_url_ = GURL(url_spec); |
| 281 return true; | 310 return true; |
| 282 } | 311 } |
| 283 | 312 |
| 284 bool BaseSessionService::RestoreSetTabExtensionAppIDCommand( | 313 bool BaseSessionService::RestoreSetTabExtensionAppIDCommand( |
| 285 const SessionCommand& command, | 314 const SessionCommand& command, |
| 286 SessionID::id_type* tab_id, | 315 SessionID::id_type* tab_id, |
| 287 std::string* extension_app_id) { | 316 std::string* extension_app_id) { |
| 288 scoped_ptr<Pickle> pickle(command.PayloadAsPickle()); | 317 scoped_ptr<Pickle> pickle(command.PayloadAsPickle()); |
| 289 if (!pickle.get()) | 318 if (!pickle.get()) |
| 290 return false; | 319 return false; |
| 291 | 320 |
| 292 PickleIterator iterator(*pickle); | 321 PickleIterator iterator(*pickle); |
| 293 return pickle->ReadInt(&iterator, tab_id) && | 322 return pickle->ReadInt(&iterator, tab_id) && |
| 294 pickle->ReadString(&iterator, extension_app_id); | 323 pickle->ReadString(&iterator, extension_app_id); |
| 295 } | 324 } |
| 296 | 325 |
| 326 bool BaseSessionService::RestoreSetTabUserAgentOverrideCommand( |
| 327 const SessionCommand& command, |
| 328 SessionID::id_type* tab_id, |
| 329 std::string* user_agent_override) { |
| 330 scoped_ptr<Pickle> pickle(command.PayloadAsPickle()); |
| 331 if (!pickle.get()) |
| 332 return false; |
| 333 |
| 334 PickleIterator iterator(*pickle); |
| 335 return pickle->ReadInt(&iterator, tab_id) && |
| 336 pickle->ReadString(&iterator, user_agent_override); |
| 337 } |
| 338 |
| 297 bool BaseSessionService::RestoreSetWindowAppNameCommand( | 339 bool BaseSessionService::RestoreSetWindowAppNameCommand( |
| 298 const SessionCommand& command, | 340 const SessionCommand& command, |
| 299 SessionID::id_type* window_id, | 341 SessionID::id_type* window_id, |
| 300 std::string* app_name) { | 342 std::string* app_name) { |
| 301 scoped_ptr<Pickle> pickle(command.PayloadAsPickle()); | 343 scoped_ptr<Pickle> pickle(command.PayloadAsPickle()); |
| 302 if (!pickle.get()) | 344 if (!pickle.get()) |
| 303 return false; | 345 return false; |
| 304 | 346 |
| 305 PickleIterator iterator(*pickle); | 347 PickleIterator iterator(*pickle); |
| 306 return pickle->ReadInt(&iterator, window_id) && | 348 return pickle->ReadInt(&iterator, window_id) && |
| (...skipping 24 matching lines...) Expand all Loading... |
| 331 if (profile_ && BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) { | 373 if (profile_ && BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) { |
| 332 return BrowserThread::PostTask(BrowserThread::FILE, from_here, task); | 374 return BrowserThread::PostTask(BrowserThread::FILE, from_here, task); |
| 333 } else { | 375 } else { |
| 334 // Fall back to executing on the main thread if the file thread | 376 // Fall back to executing on the main thread if the file thread |
| 335 // has gone away (around shutdown time) or if we're running as | 377 // has gone away (around shutdown time) or if we're running as |
| 336 // part of a unit test that does not set profile_. | 378 // part of a unit test that does not set profile_. |
| 337 task.Run(); | 379 task.Run(); |
| 338 return true; | 380 return true; |
| 339 } | 381 } |
| 340 } | 382 } |
| OLD | NEW |