1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SESSIONS_SESSION_COMMAND_H_ 6 #define CHROME_BROWSER_SESSIONS_SESSION_COMMAND_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 12 class Pickle; 13 14 // SessionCommand contains a command id and arbitrary chunk of data. The id 15 // and chunk of data are specific to the service creating them. 16 // 17 // Both TabRestoreService and SessionService use SessionCommands to represent 18 // state on disk. 19 // 20 // There are two ways to create a SessionCommand: 21 // . Specificy the size of the data block to create. This is useful for 22 // commands that have a fixed size. 23 // . From a pickle, this is useful for commands whose length varies. 24 class SessionCommand { 25 public: 26 // These get written to disk, so we define types for them. 27 // Type for the identifier. 28 typedef uint8 id_type; 29 30 // Type for writing the size. 31 typedef uint16 size_type; 32 33 // Creates a session command with the specified id. This allocates a buffer 34 // of size |size| that must be filled via contents(). 35 SessionCommand(id_type id, size_type size); 36 37 // Convenience constructor that creates a session command with the specified 38 // id whose contents is populated from the contents of pickle. 39 SessionCommand(id_type id, const Pickle& pickle); 40 41 // The contents of the command. contents()42 char* contents() { return const_cast<char*>(contents_.c_str()); } contents()43 const char* contents() const { return contents_.c_str(); } 44 45 // Identifier for the command. id()46 id_type id() const { return id_; } 47 48 // Size of data. size()49 size_type size() const { return static_cast<size_type>(contents_.size()); } 50 51 // Convenience for extracting the data to a target. Returns false if 52 // count is not equal to the size of data this command contains. 53 bool GetPayload(void* dest, size_t count) const; 54 55 // Returns the contents as a pickle. It is up to the caller to delete the 56 // returned Pickle. The returned Pickle references the underlying data of 57 // this SessionCommand. If you need it to outlive the command, copy the 58 // pickle. 59 Pickle* PayloadAsPickle() const; 60 61 private: 62 const id_type id_; 63 std::string contents_; 64 65 DISALLOW_COPY_AND_ASSIGN(SessionCommand); 66 }; 67 68 #endif // CHROME_BROWSER_SESSIONS_SESSION_COMMAND_H_ 69