Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(370)

Side by Side Diff: chrome/browser/sessions/base_session_service.cc

Issue 10170016: Add info about user agent overrides to WebContents (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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.GetOverrideUserAgent());
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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 int policy_int; 286 int policy_int;
264 WebReferrerPolicy policy; 287 WebReferrerPolicy policy;
265 if (pickle->ReadInt(&iterator, &policy_int)) 288 if (pickle->ReadInt(&iterator, &policy_int))
266 policy = static_cast<WebReferrerPolicy>(policy_int); 289 policy = static_cast<WebReferrerPolicy>(policy_int);
267 else 290 else
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 // Default to not overriding the user agent if we don't have enough info.
274 std::string url_spec; 297 std::string url_spec;
275 if (!pickle->ReadString(&iterator, &url_spec)) 298 bool override_user_agent;
299 if (!pickle->ReadString(&iterator, &url_spec) ||
300 !pickle->ReadBool(&iterator, &override_user_agent)) {
276 url_spec = std::string(); 301 url_spec = std::string();
sky 2012/04/23 23:30:15 I think you want the override_user_agent in an els
gone 2012/04/24 09:30:37 Current version splits it off.
302 override_user_agent = false;
303 }
277 navigation->set_original_request_url(GURL(url_spec)); 304 navigation->set_original_request_url(GURL(url_spec));
305 navigation->set_override_user_agent(override_user_agent);
278 } 306 }
279 307
280 navigation->virtual_url_ = GURL(url_spec); 308 navigation->virtual_url_ = GURL(url_spec);
281 return true; 309 return true;
282 } 310 }
283 311
284 bool BaseSessionService::RestoreSetTabExtensionAppIDCommand( 312 bool BaseSessionService::RestoreSetTabExtensionAppIDCommand(
285 const SessionCommand& command, 313 const SessionCommand& command,
286 SessionID::id_type* tab_id, 314 SessionID::id_type* tab_id,
287 std::string* extension_app_id) { 315 std::string* extension_app_id) {
288 scoped_ptr<Pickle> pickle(command.PayloadAsPickle()); 316 scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
289 if (!pickle.get()) 317 if (!pickle.get())
290 return false; 318 return false;
291 319
292 PickleIterator iterator(*pickle); 320 PickleIterator iterator(*pickle);
293 return pickle->ReadInt(&iterator, tab_id) && 321 return pickle->ReadInt(&iterator, tab_id) &&
294 pickle->ReadString(&iterator, extension_app_id); 322 pickle->ReadString(&iterator, extension_app_id);
295 } 323 }
296 324
325 bool BaseSessionService::RestoreSetTabUserAgentOverrideCommand(
326 const SessionCommand& command,
327 SessionID::id_type* tab_id,
328 std::string* user_agent_override) {
329 scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
330 if (!pickle.get())
331 return false;
332
333 PickleIterator iterator(*pickle);
334 return pickle->ReadInt(&iterator, tab_id) &&
335 pickle->ReadString(&iterator, user_agent_override);
336 }
337
297 bool BaseSessionService::RestoreSetWindowAppNameCommand( 338 bool BaseSessionService::RestoreSetWindowAppNameCommand(
298 const SessionCommand& command, 339 const SessionCommand& command,
299 SessionID::id_type* window_id, 340 SessionID::id_type* window_id,
300 std::string* app_name) { 341 std::string* app_name) {
301 scoped_ptr<Pickle> pickle(command.PayloadAsPickle()); 342 scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
302 if (!pickle.get()) 343 if (!pickle.get())
303 return false; 344 return false;
304 345
305 PickleIterator iterator(*pickle); 346 PickleIterator iterator(*pickle);
306 return pickle->ReadInt(&iterator, window_id) && 347 return pickle->ReadInt(&iterator, window_id) &&
(...skipping 24 matching lines...) Expand all
331 if (profile_ && BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) { 372 if (profile_ && BrowserThread::IsMessageLoopValid(BrowserThread::FILE)) {
332 return BrowserThread::PostTask(BrowserThread::FILE, from_here, task); 373 return BrowserThread::PostTask(BrowserThread::FILE, from_here, task);
333 } else { 374 } else {
334 // Fall back to executing on the main thread if the file thread 375 // 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 376 // has gone away (around shutdown time) or if we're running as
336 // part of a unit test that does not set profile_. 377 // part of a unit test that does not set profile_.
337 task.Run(); 378 task.Run();
338 return true; 379 return true;
339 } 380 }
340 } 381 }
OLDNEW
« no previous file with comments | « chrome/browser/sessions/base_session_service.h ('k') | chrome/browser/sessions/session_service_test_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698