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

Unified Diff: chrome/browser/sessions/base_session_service_commands.cc

Issue 672083002: Refactoring of SessionService to get componentized. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First version Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sessions/base_session_service_commands.cc
diff --git a/chrome/browser/sessions/base_session_service_commands.cc b/chrome/browser/sessions/base_session_service_commands.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e1f20ae2dea0bd0d3939b70ee7c0e0f030e08048
--- /dev/null
+++ b/chrome/browser/sessions/base_session_service_commands.cc
@@ -0,0 +1,161 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/sessions/base_session_service_commands.h"
+
+#include "base/pickle.h"
+#include "chrome/browser/sessions/session_backend.h"
+#include "chrome/browser/sessions/session_types.h"
+
+// BaseSessionService ---------------------------------------------------------
+
+namespace {
+
+// Helper used by CreateUpdateTabNavigationCommand(). It writes |str| to
+// |pickle|, if and only if |str| fits within (|max_bytes| - |*bytes_written|).
+// |bytes_written| is incremented to reflect the data written.
+void WriteStringToPickle(Pickle& pickle, int* bytes_written, int max_bytes,
+ const std::string& str) {
+ int num_bytes = str.size() * sizeof(char);
+ if (*bytes_written + num_bytes < max_bytes) {
+ *bytes_written += num_bytes;
+ pickle.WriteString(str);
+ } else {
+ pickle.WriteString(std::string());
+ }
+}
+
+} // namespace
+
+BaseSessionServiceCommands::BaseSessionServiceCommands() {}
+
+BaseSessionServiceCommands::~BaseSessionServiceCommands() {
+}
+
+SessionCommand* BaseSessionServiceCommands::CreateUpdateTabNavigationCommand(
+ SessionID::id_type command_id,
+ SessionID::id_type tab_id,
+ const sessions::SerializedNavigationEntry& navigation) {
+ // Use pickle to handle marshalling.
+ Pickle pickle;
+ pickle.WriteInt(tab_id);
+ // We only allow navigations up to 63k (which should be completely
+ // reasonable).
+ static const size_t max_state_size =
+ std::numeric_limits<SessionCommand::size_type>::max() - 1024;
+ navigation.WriteToPickle(max_state_size, &pickle);
+ return new SessionCommand(command_id, pickle);
+}
+
+SessionCommand* BaseSessionServiceCommands::CreateSetTabExtensionAppIDCommand(
+ SessionID::id_type command_id,
+ SessionID::id_type tab_id,
+ const std::string& extension_id) {
+ // Use pickle to handle marshalling.
+ Pickle pickle;
+ pickle.WriteInt(tab_id);
+
+ // Enforce a max for ids. They should never be anywhere near this size.
+ static const SessionCommand::size_type max_id_size =
+ std::numeric_limits<SessionCommand::size_type>::max() - 1024;
+
+ int bytes_written = 0;
+
+ WriteStringToPickle(pickle, &bytes_written, max_id_size, extension_id);
+
+ return new SessionCommand(command_id, pickle);
+}
+
+SessionCommand*
+BaseSessionServiceCommands::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* BaseSessionServiceCommands::CreateSetWindowAppNameCommand(
+ SessionID::id_type command_id,
+ SessionID::id_type window_id,
+ const std::string& app_name) {
+ // Use pickle to handle marshalling.
+ Pickle pickle;
+ pickle.WriteInt(window_id);
+
+ // Enforce a max for ids. They should never be anywhere near this size.
+ static const SessionCommand::size_type max_id_size =
+ std::numeric_limits<SessionCommand::size_type>::max() - 1024;
+
+ int bytes_written = 0;
+
+ WriteStringToPickle(pickle, &bytes_written, max_id_size, app_name);
+
+ return new SessionCommand(command_id, pickle);
+}
+
+bool BaseSessionServiceCommands::RestoreUpdateTabNavigationCommand(
+ const SessionCommand& command,
+ sessions::SerializedNavigationEntry* navigation,
+ SessionID::id_type* tab_id) {
+ scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
+ if (!pickle.get())
+ return false;
+ PickleIterator iterator(*pickle);
+ return
+ pickle->ReadInt(&iterator, tab_id) &&
+ navigation->ReadFromPickle(&iterator);
+}
+
+bool BaseSessionServiceCommands::RestoreSetTabExtensionAppIDCommand(
+ const SessionCommand& command,
+ SessionID::id_type* tab_id,
+ std::string* extension_app_id) {
+ scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
+ if (!pickle.get())
+ return false;
+
+ PickleIterator iterator(*pickle);
+ return pickle->ReadInt(&iterator, tab_id) &&
+ pickle->ReadString(&iterator, extension_app_id);
+}
+
+bool BaseSessionServiceCommands::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 BaseSessionServiceCommands::RestoreSetWindowAppNameCommand(
+ const SessionCommand& command,
+ SessionID::id_type* window_id,
+ std::string* app_name) {
+ scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
+ if (!pickle.get())
+ return false;
+
+ PickleIterator iterator(*pickle);
+ return pickle->ReadInt(&iterator, window_id) &&
+ pickle->ReadString(&iterator, app_name);
+}

Powered by Google App Engine
This is Rietveld 408576698