blob: b50b0d15dc4c114065cc1cce1f69394e0b824c97 [file] [log] [blame]
// Copyright (c) 2009 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.
#ifndef CHROME_COMMON_RENDER_MESSAGES_H_
#define CHROME_COMMON_RENDER_MESSAGES_H_
#include <string>
#include <vector>
#include <map>
#include "app/clipboard/clipboard.h"
#include "app/gfx/native_widget_types.h"
#include "base/basictypes.h"
#include "base/platform_file.h"
#include "base/ref_counted.h"
#include "base/shared_memory.h"
#include "base/string16.h"
#include "chrome/browser/renderer_host/resource_handler.h"
#include "chrome/common/common_param_traits.h"
#include "chrome/common/css_colors.h"
#include "chrome/common/dom_storage_common.h"
#include "chrome/common/edit_command.h"
#include "chrome/common/extensions/url_pattern.h"
#include "chrome/common/filter_policy.h"
#include "chrome/common/navigation_gesture.h"
#include "chrome/common/page_transition_types.h"
#include "chrome/common/renderer_preferences.h"
#include "chrome/common/transport_dib.h"
#include "chrome/common/view_types.h"
#include "chrome/common/webkit_param_traits.h"
#include "googleurl/src/gurl.h"
#include "ipc/ipc_message_utils.h"
#include "ipc/ipc_platform_file.h"
#include "media/audio/audio_output.h"
#include "net/base/upload_data.h"
#include "net/http/http_response_headers.h"
#include "webkit/appcache/appcache_interfaces.h"
#include "webkit/glue/context_menu.h"
#include "webkit/glue/form_data.h"
#include "webkit/glue/form_field.h"
#include "webkit/glue/form_field_values.h"
#include "webkit/glue/password_form.h"
#include "webkit/glue/password_form_dom_manager.h"
#include "webkit/glue/resource_loader_bridge.h"
#include "webkit/glue/webaccessibility.h"
#include "webkit/glue/webcookie.h"
#include "webkit/glue/webdropdata.h"
#include "webkit/glue/webmenuitem.h"
#include "webkit/glue/webplugin.h"
#include "webkit/glue/webplugininfo.h"
#include "webkit/glue/webpreferences.h"
#if defined(OS_POSIX)
#endif
namespace base {
class Time;
}
class SkBitmap;
// Parameters structure for ViewMsg_Navigate, which has too many data
// parameters to be reasonably put in a predefined IPC message.
struct ViewMsg_Navigate_Params {
enum NavigationType {
// Reload the page.
RELOAD,
// The navigation is the result of session restore and should honor the
// page's cache policy while restoring form state. This is set to true if
// restoring a tab/session from the previous session and the previous
// session did not crash. If this is not set and the page was restored then
// the page's cache policy is ignored and we load from the cache.
RESTORE,
// Navigation type not categorized by the other types.
NORMAL
};
// The page_id for this navigation, or -1 if it is a new navigation. Back,
// Forward, and Reload navigations should have a valid page_id. If the load
// succeeds, then this page_id will be reflected in the resultant
// ViewHostMsg_FrameNavigate message.
int32 page_id;
// The URL to load.
GURL url;
// The URL to send in the "Referer" header field. Can be empty if there is
// no referrer.
GURL referrer;
// The type of transition.
PageTransition::Type transition;
// Opaque history state (received by ViewHostMsg_UpdateState).
std::string state;
// Type of navigation.
NavigationType navigation_type;
// The time the request was created
base::Time request_time;
};
// Current status of the audio output stream in the browser process. Browser
// sends information about the current playback state and error to the
// renderer process using this type.
struct ViewMsg_AudioStreamState {
enum State {
kPlaying,
kPaused,
kError
};
// Carries the current playback state.
State state;
};
// Parameters structure for ViewHostMsg_FrameNavigate, which has too many data
// parameters to be reasonably put in a predefined IPC message.
struct ViewHostMsg_FrameNavigate_Params {
// Page ID of this navigation. The renderer creates a new unique page ID
// anytime a new session history entry is created. This means you'll get new
// page IDs for user actions, and the old page IDs will be reloaded when
// iframes are loaded automatically.
int32 page_id;
// URL of the page being loaded.
GURL url;
// URL of the referrer of this load. WebKit generates this based on the
// source of the event that caused the load.
GURL referrer;
// The type of transition.
PageTransition::Type transition;
// Lists the redirects that occurred on the way to the current page. This
// vector has the same format as reported by the WebDataSource in the glue,
// with the current page being the last one in the list (so even when
// there's no redirect, there will be one entry in the list.
std::vector<GURL> redirects;
// Set to false if we want to update the session history but not update
// the browser history. E.g., on unreachable urls.
bool should_update_history;
// See SearchableFormData for a description of these.
GURL searchable_form_url;
std::string searchable_form_encoding;
// See password_form.h.
webkit_glue::PasswordForm password_form;
// Information regarding the security of the connection (empty if the
// connection was not secure).
std::string security_info;
// The gesture that initiated this navigation.
NavigationGesture gesture;
// Contents MIME type of main frame.
std::string contents_mime_type;
// True if this was a post request.
bool is_post;
// Whether the content of the frame was replaced with some alternate content
// (this can happen if the resource was insecure).
bool is_content_filtered;
// The status code of the HTTP request.
int http_status_code;
};
// Values that may be OR'd together to form the 'flags' parameter of a
// ViewHostMsg_UpdateRect_Params structure.
struct ViewHostMsg_UpdateRect_Flags {
enum {
IS_RESIZE_ACK = 1 << 0,
IS_RESTORE_ACK = 1 << 1,
IS_REPAINT_ACK = 1 << 2,
};
static bool is_resize_ack(int flags) {
return (flags & IS_RESIZE_ACK) != 0;
}
static bool is_restore_ack(int flags) {
return (flags & IS_RESTORE_ACK) != 0;
}
static bool is_repaint_ack(int flags) {
return (flags & IS_REPAINT_ACK) != 0;
}
};
struct ViewHostMsg_UpdateRect_Params {
// The bitmap to be painted into the view at the locations specified by
// update_rects.
TransportDIB::Id bitmap;
// The position and size of the bitmap.
gfx::Rect bitmap_rect;
// The scroll offset. Only one of these can be non-zero, and if they are
// both zero, then it means there is no scrolling and the scroll_rect is
// ignored.
int dx;
int dy;
// The rectangular region to scroll.
gfx::Rect scroll_rect;
// The regions of the bitmap (in view coords) that contain updated pixels.
// In the case of scrolling, this includes the scroll damage rect.
std::vector<gfx::Rect> copy_rects;
// The size of the RenderView when this message was generated. This is
// included so the host knows how large the view is from the perspective of
// the renderer process. This is necessary in case a resize operation is in
// progress.
gfx::Size view_size;
// New window locations for plugin child windows.
std::vector<webkit_glue::WebPluginGeometry> plugin_window_moves;
// The following describes the various bits that may be set in flags:
//
// ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK
// Indicates that this is a response to a ViewMsg_Resize message.
//
// ViewHostMsg_UpdateRect_Flags::IS_RESTORE_ACK
// Indicates that this is a response to a ViewMsg_WasRestored message.
//
// ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK
// Indicates that this is a response to a ViewMsg_Repaint message.
//
// If flags is zero, then this message corresponds to an unsoliticed paint
// request by the render view. Any of the above bits may be set in flags,
// which would indicate that this paint message is an ACK for multiple
// request messages.
int flags;
};
// Information on closing a tab. This is used both for ViewMsg_ClosePage, and
// the corresponding ViewHostMsg_ClosePage_ACK.
struct ViewMsg_ClosePage_Params {
// The identifier of the RenderProcessHost for the currently closing view.
//
// These first two parameters are technically redundant since they are
// needed only when processing the ACK message, and the processor
// theoretically knows both the process and route ID. However, this is
// difficult to figure out with our current implementation, so this
// information is duplicate here.
int closing_process_id;
// The route identifier for the currently closing RenderView.
int closing_route_id;
// True when this close is for the first (closing) tab of a cross-site
// transition where we switch processes. False indicates the close is for the
// entire tab.
//
// When true, the new_* variables below must be filled in. Otherwise they must
// both be -1.
bool for_cross_site_transition;
// The identifier of the RenderProcessHost for the new view attempting to
// replace the closing one above. This must be valid when
// for_cross_site_transition is set, and must be -1 otherwise.
int new_render_process_host_id;
// The identifier of the *request* the new view made that is causing the
// cross-site transition. This is *not* a route_id, but the request that we
// will resume once the ACK from the closing view has been received. This
// must be valid when for_cross_site_transition is set, and must be -1
// otherwise.
int new_request_id;
};
// Parameters for a resource request.
struct ViewHostMsg_Resource_Request {
// The request method: GET, POST, etc.
std::string method;
// The requested URL.
GURL url;
// Usually the URL of the document in the top-level window, which may be
// checked by the third-party cookie blocking policy. Leaving it empty may
// lead to undesired cookie blocking. Third-party cookie blocking can be
// bypassed by setting first_party_for_cookies = url, but this should ideally
// only be done if there really is no way to determine the correct value.
GURL first_party_for_cookies;
// The referrer to use (may be empty).
GURL referrer;
// The origin of the frame that is associated with this request. This is used
// to update our mixed content state.
std::string frame_origin;
// The origin of the main frame (top-level frame) that is associated with this
// request. This is used to update our mixed content state.
std::string main_frame_origin;
// Additional HTTP request headers.
std::string headers;
// URLRequest load flags (0 by default).
int load_flags;
// Unique ID of process that originated this request. For normal renderer
// requests, this will be the ID of the renderer. For plugin requests routed
// through the renderer, this will be the plugin's ID.
int origin_child_id;
// What this resource load is for (main frame, sub-frame, sub-resource,
// object).
ResourceType::Type resource_type;
// Used by plugin->browser requests to get the correct URLRequestContext.
uint32 request_context;
// Indicates which frame (or worker context) the request is being loaded into,
// or kNoHostId.
int appcache_host_id;
// Optional upload data (may be null).
scoped_refptr<net::UploadData> upload_data;
// The following two members are specified if the request is initiated by
// a plugin like Gears.
// Contains the id of the host renderer.
int host_renderer_id;
// Contains the id of the host render view.
int host_render_view_id;
};
// Parameters for a render request.
struct ViewMsg_Print_Params {
// In pixels according to dpi_x and dpi_y.
gfx::Size printable_size;
// Specifies dots per inch.
double dpi;
// Minimum shrink factor. See PrintSettings::min_shrink for more information.
double min_shrink;
// Maximum shrink factor. See PrintSettings::max_shrink for more information.
double max_shrink;
// Desired apparent dpi on paper.
int desired_dpi;
// Cookie for the document to ensure correctness.
int document_cookie;
// Should only print currently selected text.
bool selection_only;
// Warning: do not compare document_cookie.
bool Equals(const ViewMsg_Print_Params& rhs) const {
return printable_size == rhs.printable_size &&
dpi == rhs.dpi &&
min_shrink == rhs.min_shrink &&
max_shrink == rhs.max_shrink &&
desired_dpi == rhs.desired_dpi &&
selection_only == rhs.selection_only;
}
// Checking if the current params is empty. Just initialized after a memset.
bool IsEmpty() const {
return !document_cookie && !desired_dpi && !max_shrink && !min_shrink &&
!dpi && printable_size.IsEmpty() && !selection_only;
}
};
struct ViewMsg_PrintPage_Params {
// Parameters to render the page as a printed page. It must always be the same
// value for all the document.
ViewMsg_Print_Params params;
// The page number is the indicator of the square that should be rendered
// according to the layout specified in ViewMsg_Print_Params.
int page_number;
};
struct ViewMsg_PrintPages_Params {
// Parameters to render the page as a printed page. It must always be the same
// value for all the document.
ViewMsg_Print_Params params;
// If empty, this means a request to render all the printed pages.
std::vector<int> pages;
};
struct ViewMsg_DatabaseOpenFileResponse_Params {
IPC::PlatformFileForTransit file_handle; // DB file handle
#if defined(OS_POSIX)
base::FileDescriptor dir_handle; // DB directory handle
#endif
};
// Parameters to describe a rendered page.
struct ViewHostMsg_DidPrintPage_Params {
// A shared memory handle to the EMF data. This data can be quite large so a
// memory map needs to be used.
base::SharedMemoryHandle metafile_data_handle;
// Size of the metafile data.
unsigned data_size;
// Cookie for the document to ensure correctness.
int document_cookie;
// Page number.
int page_number;
// Shrink factor used to render this page.
double actual_shrink;
};
// The first parameter for the ViewHostMsg_ImeUpdateStatus message.
enum ViewHostMsg_ImeControl {
IME_DISABLE = 0,
IME_MOVE_WINDOWS,
IME_COMPLETE_COMPOSITION,
};
// Parameters for creating an audio output stream.
struct ViewHostMsg_Audio_CreateStream {
// Format request for the stream.
AudioManager::Format format;
// Number of channels.
int channels;
// Sampling rate (frequency) of the output stream.
int sample_rate;
// Number of bits per sample;
int bits_per_sample;
// Number of bytes per packet. Determines the maximum number of bytes
// transported for each audio packet request.
size_t packet_size;
// Maximum number of bytes of audio packets that should be kept in the browser
// process.
size_t buffer_capacity;
};
// This message is used for supporting popup menus on Mac OS X using native
// Cocoa controls. The renderer sends us this message which we use to populate
// the popup menu.
struct ViewHostMsg_ShowPopup_Params {
// Position on the screen.
gfx::Rect bounds;
// The height of each item in the menu.
int item_height;
// The currently selected (displayed) item in the menu.
int selected_item;
// The entire list of items in the popup menu.
std::vector<WebMenuItem> popup_items;
};
// Parameters for the IPC message ViewHostMsg_ScriptedPrint
struct ViewHostMsg_ScriptedPrint_Params {
int routing_id;
gfx::NativeViewId host_window_id;
int cookie;
int expected_pages_count;
bool has_selection;
};
// Signals a storage event.
struct ViewMsg_DOMStorageEvent_Params {
// The key that generated the storage event. Null if clear() was called.
NullableString16 key_;
// The old value of this key. Null on clear() or if it didn't have a value.
NullableString16 old_value_;
// The new value of this key. Null on removeItem() or clear().
NullableString16 new_value_;
// The origin this is associated with.
string16 origin_;
// The URL of the page that caused the storage event.
GURL url_;
// The storage type of this event.
DOMStorageType storage_type_;
};
// Allows an extension to execute code in a tab.
struct ViewMsg_ExecuteCode_Params {
ViewMsg_ExecuteCode_Params(){}
ViewMsg_ExecuteCode_Params(int request_id, const std::string& extension_id,
const std::vector<URLPattern>& host_permissions,
bool is_javascript, const std::string& code,
bool all_frames)
: request_id(request_id), extension_id(extension_id),
host_permissions(host_permissions), is_javascript(is_javascript),
code(code), all_frames(all_frames) {
}
// The extension API request id, for responding.
int request_id;
// The ID of the requesting extension. To know which isolated world to
// execute the code inside of.
std::string extension_id;
// The host permissions of the requesting extension. So that we can check them
// right before injecting, to avoid any race conditions.
std::vector<URLPattern> host_permissions;
// Whether the code is JavaScript or CSS.
bool is_javascript;
// String of code to execute.
std::string code;
// Whether to inject into all frames, or only the root frame.
bool all_frames;
};
// Parameters for the message that creates a worker thread.
struct ViewHostMsg_CreateWorker_Params {
// URL for the worker script.
GURL url;
// True if this is a SharedWorker, false if it is a dedicated Worker.
bool is_shared;
// Name for a SharedWorker, otherwise empty string.
string16 name;
// The ID of the parent document (unique within parent renderer).
unsigned long long document_id;
// RenderView routing id used to send messages back to the parent.
int render_view_route_id;
};
// Creates a new view via a control message since the view doesn't yet exist.
struct ViewMsg_New_Params {
// The parent window's id.
gfx::NativeViewId parent_window;
// Renderer-wide preferences.
RendererPreferences renderer_preferences;
// Preferences for this view.
WebPreferences web_preferences;
// The ID of the view to be created.
int32 view_id;
// The session storage namespace ID this view should use.
int64 session_storage_namespace_id;
};
// Message to ask the browser to translate some text from one language to
// another.
struct ViewHostMsg_TranslateTextParam {
// The routing id. Even though ViewHostMsg_TranslateText is a control message
// (sent to the browser, not to a specific RenderViewHost), the browser needs
// the routing id in order to send the response back to the right RenderView.
int routing_id;
// An id used to identify that specific translation.
int work_id;
// The id of the page this translation originated from.
int page_id;
// The text chunks that need to be translated.
std::vector<string16> text_chunks;
// The ISO code of the language the text to translate is in.
std::string from_language;
// The ISO code of the language the text should be translated to.
std::string to_language;
// Whether a secure connection should be used when transmitting the text for
// translation to an external server.
bool secure;
};
namespace IPC {
template <>
struct ParamTraits<ResourceType::Type> {
typedef ResourceType::Type param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type) || !ResourceType::ValidType(type))
return false;
*p = ResourceType::FromInt(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring type;
switch (p) {
case ResourceType::MAIN_FRAME:
type = L"MAIN_FRAME";
break;
case ResourceType::SUB_FRAME:
type = L"SUB_FRAME";
break;
case ResourceType::SUB_RESOURCE:
type = L"SUB_RESOURCE";
break;
case ResourceType::OBJECT:
type = L"OBJECT";
break;
case ResourceType::MEDIA:
type = L"MEDIA";
break;
default:
type = L"UNKNOWN";
break;
}
LogParam(type, l);
}
};
template <>
struct ParamTraits<FilterPolicy::Type> {
typedef FilterPolicy::Type param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type) || !FilterPolicy::ValidType(type))
return false;
*p = FilterPolicy::FromInt(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring type;
switch (p) {
case FilterPolicy::DONT_FILTER:
type = L"DONT_FILTER";
break;
case FilterPolicy::FILTER_ALL:
type = L"FILTER_ALL";
break;
case FilterPolicy::FILTER_ALL_EXCEPT_IMAGES:
type = L"FILTER_ALL_EXCEPT_IMAGES";
break;
default:
type = L"UNKNOWN";
break;
}
LogParam(type, l);
}
};
template <>
struct ParamTraits<webkit_glue::WebAccessibility::InParams> {
typedef webkit_glue::WebAccessibility::InParams param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.object_id);
WriteParam(m, p.function_id);
WriteParam(m, p.child_id);
WriteParam(m, p.input_long1);
WriteParam(m, p.input_long2);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->object_id) &&
ReadParam(m, iter, &p->function_id) &&
ReadParam(m, iter, &p->child_id) &&
ReadParam(m, iter, &p->input_long1) &&
ReadParam(m, iter, &p->input_long2);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.object_id, l);
l->append(L", ");
LogParam(p.function_id, l);
l->append(L", ");
LogParam(p.child_id, l);
l->append(L", ");
LogParam(p.input_long1, l);
l->append(L", ");
LogParam(p.input_long2, l);
l->append(L")");
}
};
template <>
struct ParamTraits<webkit_glue::WebAccessibility::OutParams> {
typedef webkit_glue::WebAccessibility::OutParams param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.object_id);
WriteParam(m, p.output_long1);
WriteParam(m, p.output_long2);
WriteParam(m, p.output_long3);
WriteParam(m, p.output_long4);
WriteParam(m, p.output_string);
WriteParam(m, p.return_code);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->object_id) &&
ReadParam(m, iter, &p->output_long1) &&
ReadParam(m, iter, &p->output_long2) &&
ReadParam(m, iter, &p->output_long3) &&
ReadParam(m, iter, &p->output_long4) &&
ReadParam(m, iter, &p->output_string) &&
ReadParam(m, iter, &p->return_code);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.object_id, l);
l->append(L", ");
LogParam(p.output_long1, l);
l->append(L", ");
LogParam(p.output_long2, l);
l->append(L", ");
LogParam(p.output_long3, l);
l->append(L", ");
LogParam(p.output_long4, l);
l->append(L", ");
LogParam(p.output_string, l);
l->append(L", ");
LogParam(p.return_code, l);
l->append(L")");
}
};
template <>
struct ParamTraits<ViewHostMsg_ImeControl> {
typedef ViewHostMsg_ImeControl param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<ViewHostMsg_ImeControl>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring control;
switch (p) {
case IME_DISABLE:
control = L"IME_DISABLE";
break;
case IME_MOVE_WINDOWS:
control = L"IME_MOVE_WINDOWS";
break;
case IME_COMPLETE_COMPOSITION:
control = L"IME_COMPLETE_COMPOSITION";
break;
default:
control = L"UNKNOWN";
break;
}
LogParam(control, l);
}
};
// Traits for ViewMsg_Navigate_Params structure to pack/unpack.
template <>
struct ParamTraits<ViewMsg_Navigate_Params> {
typedef ViewMsg_Navigate_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.page_id);
WriteParam(m, p.url);
WriteParam(m, p.referrer);
WriteParam(m, p.transition);
WriteParam(m, p.state);
WriteParam(m, p.navigation_type);
WriteParam(m, p.request_time);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->page_id) &&
ReadParam(m, iter, &p->url) &&
ReadParam(m, iter, &p->referrer) &&
ReadParam(m, iter, &p->transition) &&
ReadParam(m, iter, &p->state) &&
ReadParam(m, iter, &p->navigation_type) &&
ReadParam(m, iter, &p->request_time);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.page_id, l);
l->append(L", ");
LogParam(p.url, l);
l->append(L", ");
LogParam(p.transition, l);
l->append(L", ");
LogParam(p.state, l);
l->append(L", ");
LogParam(p.navigation_type, l);
l->append(L", ");
LogParam(p.request_time, l);
l->append(L")");
}
};
template<>
struct ParamTraits<ViewMsg_Navigate_Params::NavigationType> {
typedef ViewMsg_Navigate_Params::NavigationType param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<ViewMsg_Navigate_Params::NavigationType>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring event;
switch (p) {
case ViewMsg_Navigate_Params::RELOAD:
event = L"NavigationType_RELOAD";
break;
case ViewMsg_Navigate_Params::RESTORE:
event = L"NavigationType_RESTORE";
break;
case ViewMsg_Navigate_Params::NORMAL:
event = L"NavigationType_NORMAL";
break;
default:
event = L"NavigationType_UNKNOWN";
break;
}
LogParam(event, l);
}
};
// Traits for PasswordForm_Params structure to pack/unpack.
template <>
struct ParamTraits<webkit_glue::PasswordForm> {
typedef webkit_glue::PasswordForm param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.signon_realm);
WriteParam(m, p.origin);
WriteParam(m, p.action);
WriteParam(m, p.submit_element);
WriteParam(m, p.username_element);
WriteParam(m, p.username_value);
WriteParam(m, p.password_element);
WriteParam(m, p.password_value);
WriteParam(m, p.old_password_element);
WriteParam(m, p.old_password_value);
WriteParam(m, p.ssl_valid);
WriteParam(m, p.preferred);
WriteParam(m, p.blacklisted_by_user);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->signon_realm) &&
ReadParam(m, iter, &p->origin) &&
ReadParam(m, iter, &p->action) &&
ReadParam(m, iter, &p->submit_element) &&
ReadParam(m, iter, &p->username_element) &&
ReadParam(m, iter, &p->username_value) &&
ReadParam(m, iter, &p->password_element) &&
ReadParam(m, iter, &p->password_value) &&
ReadParam(m, iter, &p->old_password_element) &&
ReadParam(m, iter, &p->old_password_value) &&
ReadParam(m, iter, &p->ssl_valid) &&
ReadParam(m, iter, &p->preferred) &&
ReadParam(m, iter, &p->blacklisted_by_user);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<PasswordForm>");
}
};
// Traits for FormFieldValues_Params structure to pack/unpack.
template <>
struct ParamTraits<webkit_glue::FormFieldValues> {
typedef webkit_glue::FormFieldValues param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.form_name);
WriteParam(m, p.method);
WriteParam(m, p.source_url);
WriteParam(m, p.target_url);
WriteParam(m, p.elements.size());
std::vector<webkit_glue::FormField>::const_iterator itr;
for (itr = p.elements.begin(); itr != p.elements.end(); itr++) {
WriteParam(m, itr->label());
WriteParam(m, itr->name());
WriteParam(m, itr->html_input_type());
WriteParam(m, itr->value());
}
}
static bool Read(const Message* m, void** iter, param_type* p) {
bool result = true;
result = result &&
ReadParam(m, iter, &p->form_name) &&
ReadParam(m, iter, &p->method) &&
ReadParam(m, iter, &p->source_url) &&
ReadParam(m, iter, &p->target_url);
size_t elements_size = 0;
result = result && ReadParam(m, iter, &elements_size);
for (size_t i = 0; i < elements_size; i++) {
string16 label, name, type, value;
result = result && ReadParam(m, iter, &label);
result = result && ReadParam(m, iter, &name);
result = result && ReadParam(m, iter, &type);
result = result && ReadParam(m, iter, &value);
if (result)
p->elements.push_back(
webkit_glue::FormField(label, name, type, value));
}
return result;
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<FormFieldValues>");
}
};
// Traits for ViewHostMsg_FrameNavigate_Params structure to pack/unpack.
template <>
struct ParamTraits<ViewHostMsg_FrameNavigate_Params> {
typedef ViewHostMsg_FrameNavigate_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.page_id);
WriteParam(m, p.url);
WriteParam(m, p.referrer);
WriteParam(m, p.transition);
WriteParam(m, p.redirects);
WriteParam(m, p.should_update_history);
WriteParam(m, p.searchable_form_url);
WriteParam(m, p.searchable_form_encoding);
WriteParam(m, p.password_form);
WriteParam(m, p.security_info);
WriteParam(m, p.gesture);
WriteParam(m, p.contents_mime_type);
WriteParam(m, p.is_post);
WriteParam(m, p.is_content_filtered);
WriteParam(m, p.http_status_code);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->page_id) &&
ReadParam(m, iter, &p->url) &&
ReadParam(m, iter, &p->referrer) &&
ReadParam(m, iter, &p->transition) &&
ReadParam(m, iter, &p->redirects) &&
ReadParam(m, iter, &p->should_update_history) &&
ReadParam(m, iter, &p->searchable_form_url) &&
ReadParam(m, iter, &p->searchable_form_encoding) &&
ReadParam(m, iter, &p->password_form) &&
ReadParam(m, iter, &p->security_info) &&
ReadParam(m, iter, &p->gesture) &&
ReadParam(m, iter, &p->contents_mime_type) &&
ReadParam(m, iter, &p->is_post) &&
ReadParam(m, iter, &p->is_content_filtered) &&
ReadParam(m, iter, &p->http_status_code);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.page_id, l);
l->append(L", ");
LogParam(p.url, l);
l->append(L", ");
LogParam(p.referrer, l);
l->append(L", ");
LogParam(p.transition, l);
l->append(L", ");
LogParam(p.redirects, l);
l->append(L", ");
LogParam(p.should_update_history, l);
l->append(L", ");
LogParam(p.searchable_form_url, l);
l->append(L", ");
LogParam(p.searchable_form_encoding, l);
l->append(L", ");
LogParam(p.password_form, l);
l->append(L", ");
LogParam(p.security_info, l);
l->append(L", ");
LogParam(p.gesture, l);
l->append(L", ");
LogParam(p.contents_mime_type, l);
l->append(L", ");
LogParam(p.is_post, l);
l->append(L", ");
LogParam(p.is_content_filtered, l);
l->append(L", ");
LogParam(p.http_status_code, l);
l->append(L")");
}
};
template <>
struct ParamTraits<ContextMenuParams> {
typedef ContextMenuParams param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.media_type);
WriteParam(m, p.x);
WriteParam(m, p.y);
WriteParam(m, p.link_url);
WriteParam(m, p.unfiltered_link_url);
WriteParam(m, p.src_url);
WriteParam(m, p.page_url);
WriteParam(m, p.frame_url);
WriteParam(m, p.media_flags);
WriteParam(m, p.selection_text);
WriteParam(m, p.misspelled_word);
WriteParam(m, p.dictionary_suggestions);
WriteParam(m, p.spellcheck_enabled);
WriteParam(m, p.is_editable);
WriteParam(m, p.edit_flags);
WriteParam(m, p.security_info);
WriteParam(m, p.frame_charset);
WriteParam(m, p.custom_items);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->media_type) &&
ReadParam(m, iter, &p->x) &&
ReadParam(m, iter, &p->y) &&
ReadParam(m, iter, &p->link_url) &&
ReadParam(m, iter, &p->unfiltered_link_url) &&
ReadParam(m, iter, &p->src_url) &&
ReadParam(m, iter, &p->page_url) &&
ReadParam(m, iter, &p->frame_url) &&
ReadParam(m, iter, &p->media_flags) &&
ReadParam(m, iter, &p->selection_text) &&
ReadParam(m, iter, &p->misspelled_word) &&
ReadParam(m, iter, &p->dictionary_suggestions) &&
ReadParam(m, iter, &p->spellcheck_enabled) &&
ReadParam(m, iter, &p->is_editable) &&
ReadParam(m, iter, &p->edit_flags) &&
ReadParam(m, iter, &p->security_info) &&
ReadParam(m, iter, &p->frame_charset) &&
ReadParam(m, iter, &p->custom_items);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<ContextMenuParams>");
}
};
// Traits for ViewHostMsg_UpdateRect_Params structure to pack/unpack.
template <>
struct ParamTraits<ViewHostMsg_UpdateRect_Params> {
typedef ViewHostMsg_UpdateRect_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.bitmap);
WriteParam(m, p.bitmap_rect);
WriteParam(m, p.dx);
WriteParam(m, p.dy);
WriteParam(m, p.scroll_rect);
WriteParam(m, p.copy_rects);
WriteParam(m, p.view_size);
WriteParam(m, p.plugin_window_moves);
WriteParam(m, p.flags);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->bitmap) &&
ReadParam(m, iter, &p->bitmap_rect) &&
ReadParam(m, iter, &p->dx) &&
ReadParam(m, iter, &p->dy) &&
ReadParam(m, iter, &p->scroll_rect) &&
ReadParam(m, iter, &p->copy_rects) &&
ReadParam(m, iter, &p->view_size) &&
ReadParam(m, iter, &p->plugin_window_moves) &&
ReadParam(m, iter, &p->flags);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.bitmap, l);
l->append(L", ");
LogParam(p.bitmap_rect, l);
l->append(L", ");
LogParam(p.dx, l);
l->append(L", ");
LogParam(p.dy, l);
l->append(L", ");
LogParam(p.scroll_rect, l);
l->append(L", ");
LogParam(p.copy_rects, l);
l->append(L", ");
LogParam(p.view_size, l);
l->append(L", ");
LogParam(p.plugin_window_moves, l);
l->append(L", ");
LogParam(p.flags, l);
l->append(L")");
}
};
template <>
struct ParamTraits<webkit_glue::WebPluginGeometry> {
typedef webkit_glue::WebPluginGeometry param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.window);
WriteParam(m, p.window_rect);
WriteParam(m, p.clip_rect);
WriteParam(m, p.cutout_rects);
WriteParam(m, p.rects_valid);
WriteParam(m, p.visible);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->window) &&
ReadParam(m, iter, &p->window_rect) &&
ReadParam(m, iter, &p->clip_rect) &&
ReadParam(m, iter, &p->cutout_rects) &&
ReadParam(m, iter, &p->rects_valid) &&
ReadParam(m, iter, &p->visible);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.window, l);
l->append(L", ");
LogParam(p.window_rect, l);
l->append(L", ");
LogParam(p.clip_rect, l);
l->append(L", ");
LogParam(p.cutout_rects, l);
l->append(L", ");
LogParam(p.rects_valid, l);
l->append(L", ");
LogParam(p.visible, l);
l->append(L")");
}
};
// Traits for ViewMsg_GetPlugins_Reply structure to pack/unpack.
template <>
struct ParamTraits<WebPluginMimeType> {
typedef WebPluginMimeType param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.mime_type);
WriteParam(m, p.file_extensions);
WriteParam(m, p.description);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return
ReadParam(m, iter, &r->mime_type) &&
ReadParam(m, iter, &r->file_extensions) &&
ReadParam(m, iter, &r->description);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.mime_type, l);
l->append(L", ");
LogParam(p.file_extensions, l);
l->append(L", ");
LogParam(p.description, l);
l->append(L")");
}
};
template <>
struct ParamTraits<WebPluginInfo> {
typedef WebPluginInfo param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.name);
WriteParam(m, p.path);
WriteParam(m, p.version);
WriteParam(m, p.desc);
WriteParam(m, p.mime_types);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return
ReadParam(m, iter, &r->name) &&
ReadParam(m, iter, &r->path) &&
ReadParam(m, iter, &r->version) &&
ReadParam(m, iter, &r->desc) &&
ReadParam(m, iter, &r->mime_types);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.name, l);
l->append(L", ");
l->append(L", ");
LogParam(p.path, l);
l->append(L", ");
LogParam(p.version, l);
l->append(L", ");
LogParam(p.desc, l);
l->append(L", ");
LogParam(p.mime_types, l);
l->append(L")");
}
};
// Traits for webkit_glue::PasswordFormDomManager::FillData.
template <>
struct ParamTraits<webkit_glue::PasswordFormDomManager::FillData> {
typedef webkit_glue::PasswordFormDomManager::FillData param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.basic_data);
WriteParam(m, p.additional_logins);
WriteParam(m, p.wait_for_username);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return
ReadParam(m, iter, &r->basic_data) &&
ReadParam(m, iter, &r->additional_logins) &&
ReadParam(m, iter, &r->wait_for_username);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<PasswordFormDomManager::FillData>");
}
};
template<>
struct ParamTraits<NavigationGesture> {
typedef NavigationGesture param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<NavigationGesture>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring event;
switch (p) {
case NavigationGestureUser:
event = L"GESTURE_USER";
break;
case NavigationGestureAuto:
event = L"GESTURE_AUTO";
break;
default:
event = L"GESTURE_UNKNOWN";
break;
}
LogParam(event, l);
}
};
// Traits for ViewMsg_Close_Params.
template <>
struct ParamTraits<ViewMsg_ClosePage_Params> {
typedef ViewMsg_ClosePage_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.closing_process_id);
WriteParam(m, p.closing_route_id);
WriteParam(m, p.for_cross_site_transition);
WriteParam(m, p.new_render_process_host_id);
WriteParam(m, p.new_request_id);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return ReadParam(m, iter, &r->closing_process_id) &&
ReadParam(m, iter, &r->closing_route_id) &&
ReadParam(m, iter, &r->for_cross_site_transition) &&
ReadParam(m, iter, &r->new_render_process_host_id) &&
ReadParam(m, iter, &r->new_request_id);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.closing_process_id, l);
l->append(L", ");
LogParam(p.closing_route_id, l);
l->append(L", ");
LogParam(p.for_cross_site_transition, l);
l->append(L", ");
LogParam(p.new_render_process_host_id, l);
l->append(L", ");
LogParam(p.new_request_id, l);
l->append(L")");
}
};
// Traits for ViewHostMsg_Resource_Request
template <>
struct ParamTraits<ViewHostMsg_Resource_Request> {
typedef ViewHostMsg_Resource_Request param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.method);
WriteParam(m, p.url);
WriteParam(m, p.first_party_for_cookies);
WriteParam(m, p.referrer);
WriteParam(m, p.frame_origin);
WriteParam(m, p.main_frame_origin);
WriteParam(m, p.headers);
WriteParam(m, p.load_flags);
WriteParam(m, p.origin_child_id);
WriteParam(m, p.resource_type);
WriteParam(m, p.request_context);
WriteParam(m, p.appcache_host_id);
WriteParam(m, p.upload_data);
WriteParam(m, p.host_renderer_id);
WriteParam(m, p.host_render_view_id);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return
ReadParam(m, iter, &r->method) &&
ReadParam(m, iter, &r->url) &&
ReadParam(m, iter, &r->first_party_for_cookies) &&
ReadParam(m, iter, &r->referrer) &&
ReadParam(m, iter, &r->frame_origin) &&
ReadParam(m, iter, &r->main_frame_origin) &&
ReadParam(m, iter, &r->headers) &&
ReadParam(m, iter, &r->load_flags) &&
ReadParam(m, iter, &r->origin_child_id) &&
ReadParam(m, iter, &r->resource_type) &&
ReadParam(m, iter, &r->request_context) &&
ReadParam(m, iter, &r->appcache_host_id) &&
ReadParam(m, iter, &r->upload_data) &&
ReadParam(m, iter, &r->host_renderer_id) &&
ReadParam(m, iter, &r->host_render_view_id);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.method, l);
l->append(L", ");
LogParam(p.url, l);
l->append(L", ");
LogParam(p.referrer, l);
l->append(L", ");
LogParam(p.frame_origin, l);
l->append(L", ");
LogParam(p.main_frame_origin, l);
l->append(L", ");
LogParam(p.load_flags, l);
l->append(L", ");
LogParam(p.origin_child_id, l);
l->append(L", ");
LogParam(p.resource_type, l);
l->append(L", ");
LogParam(p.request_context, l);
l->append(L", ");
LogParam(p.appcache_host_id, l);
l->append(L", ");
LogParam(p.host_renderer_id, l);
l->append(L", ");
LogParam(p.host_render_view_id, l);
l->append(L")");
}
};
template <>
struct ParamTraits<scoped_refptr<net::HttpResponseHeaders> > {
typedef scoped_refptr<net::HttpResponseHeaders> param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.get() != NULL);
if (p) {
// Do not disclose Set-Cookie headers over IPC.
p->Persist(m, net::HttpResponseHeaders::PERSIST_SANS_COOKIES);
}
}
static bool Read(const Message* m, void** iter, param_type* r) {
bool has_object;
if (!ReadParam(m, iter, &has_object))
return false;
if (has_object)
*r = new net::HttpResponseHeaders(*m, iter);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<HttpResponseHeaders>");
}
};
// Traits for webkit_glue::ResourceLoaderBridge::ResponseInfo
template <>
struct ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo> {
typedef webkit_glue::ResourceLoaderBridge::ResponseInfo param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.request_time);
WriteParam(m, p.response_time);
WriteParam(m, p.headers);
WriteParam(m, p.mime_type);
WriteParam(m, p.charset);
WriteParam(m, p.security_info);
WriteParam(m, p.content_length);
WriteParam(m, p.appcache_id);
WriteParam(m, p.appcache_manifest_url);
WriteParam(m, p.was_fetched_via_spdy);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return
ReadParam(m, iter, &r->request_time) &&
ReadParam(m, iter, &r->response_time) &&
ReadParam(m, iter, &r->headers) &&
ReadParam(m, iter, &r->mime_type) &&
ReadParam(m, iter, &r->charset) &&
ReadParam(m, iter, &r->security_info) &&
ReadParam(m, iter, &r->content_length) &&
ReadParam(m, iter, &r->appcache_id) &&
ReadParam(m, iter, &r->appcache_manifest_url) &&
ReadParam(m, iter, &r->was_fetched_via_spdy);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.request_time, l);
l->append(L", ");
LogParam(p.response_time, l);
l->append(L", ");
LogParam(p.headers, l);
l->append(L", ");
LogParam(p.mime_type, l);
l->append(L", ");
LogParam(p.charset, l);
l->append(L", ");
LogParam(p.security_info, l);
l->append(L", ");
LogParam(p.content_length, l);
l->append(L", ");
LogParam(p.appcache_id, l);
l->append(L", ");
LogParam(p.appcache_manifest_url, l);
l->append(L", ");
LogParam(p.was_fetched_via_spdy, l);
l->append(L")");
}
};
template <>
struct ParamTraits<ResourceResponseHead> {
typedef ResourceResponseHead param_type;
static void Write(Message* m, const param_type& p) {
ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo>::Write(m, p);
WriteParam(m, p.status);
WriteParam(m, p.filter_policy);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return
ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo>::Read(m,
iter,
r) &&
ReadParam(m, iter, &r->status) &&
ReadParam(m, iter, &r->filter_policy);
}
static void Log(const param_type& p, std::wstring* l) {
// log more?
ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo>::Log(p, l);
}
};
template <>
struct ParamTraits<SyncLoadResult> {
typedef SyncLoadResult param_type;
static void Write(Message* m, const param_type& p) {
ParamTraits<ResourceResponseHead>::Write(m, p);
WriteParam(m, p.final_url);
WriteParam(m, p.data);
}
static bool Read(const Message* m, void** iter, param_type* r) {
return
ParamTraits<ResourceResponseHead>::Read(m, iter, r) &&
ReadParam(m, iter, &r->final_url) &&
ReadParam(m, iter, &r->data);
}
static void Log(const param_type& p, std::wstring* l) {
// log more?
ParamTraits<webkit_glue::ResourceLoaderBridge::ResponseInfo>::Log(p, l);
}
};
// Traits for FormData structure to pack/unpack.
template <>
struct ParamTraits<FormData> {
typedef FormData param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.origin);
WriteParam(m, p.action);
WriteParam(m, p.elements);
WriteParam(m, p.values);
WriteParam(m, p.submit);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->origin) &&
ReadParam(m, iter, &p->action) &&
ReadParam(m, iter, &p->elements) &&
ReadParam(m, iter, &p->values) &&
ReadParam(m, iter, &p->submit);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<FormData>");
}
};
// Traits for ViewMsg_Print_Params
template <>
struct ParamTraits<ViewMsg_Print_Params> {
typedef ViewMsg_Print_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.printable_size);
WriteParam(m, p.dpi);
WriteParam(m, p.min_shrink);
WriteParam(m, p.max_shrink);
WriteParam(m, p.desired_dpi);
WriteParam(m, p.document_cookie);
WriteParam(m, p.selection_only);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, &p->printable_size) &&
ReadParam(m, iter, &p->dpi) &&
ReadParam(m, iter, &p->min_shrink) &&
ReadParam(m, iter, &p->max_shrink) &&
ReadParam(m, iter, &p->desired_dpi) &&
ReadParam(m, iter, &p->document_cookie) &&
ReadParam(m, iter, &p->selection_only);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<ViewMsg_Print_Params>");
}
};
// Traits for ViewMsg_PrintPage_Params
template <>
struct ParamTraits<ViewMsg_PrintPage_Params> {
typedef ViewMsg_PrintPage_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.params);
WriteParam(m, p.page_number);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, &p->params) &&
ReadParam(m, iter, &p->page_number);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<ViewMsg_PrintPage_Params>");
}
};
// Traits for ViewMsg_PrintPages_Params
template <>
struct ParamTraits<ViewMsg_PrintPages_Params> {
typedef ViewMsg_PrintPages_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.params);
WriteParam(m, p.pages);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, &p->params) &&
ReadParam(m, iter, &p->pages);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<ViewMsg_PrintPages_Params>");
}
};
// Traits for ViewHostMsg_DidPrintPage_Params
template <>
struct ParamTraits<ViewHostMsg_DidPrintPage_Params> {
typedef ViewHostMsg_DidPrintPage_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.metafile_data_handle);
WriteParam(m, p.data_size);
WriteParam(m, p.document_cookie);
WriteParam(m, p.page_number);
WriteParam(m, p.actual_shrink);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, &p->metafile_data_handle) &&
ReadParam(m, iter, &p->data_size) &&
ReadParam(m, iter, &p->document_cookie) &&
ReadParam(m, iter, &p->page_number) &&
ReadParam(m, iter, &p->actual_shrink);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<ViewHostMsg_DidPrintPage_Params>");
}
};
// Traits for reading/writing CSS Colors
template <>
struct ParamTraits<CSSColors::CSSColorName> {
typedef CSSColors::CSSColorName param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, static_cast<int>(p));
}
static bool Read(const Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, reinterpret_cast<int*>(p));
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<CSSColorName>");
}
};
// Traits for RendererPreferences structure to pack/unpack.
template <>
struct ParamTraits<RendererPreferences> {
typedef RendererPreferences param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.can_accept_load_drops);
WriteParam(m, p.should_antialias_text);
WriteParam(m, static_cast<int>(p.hinting));
WriteParam(m, static_cast<int>(p.subpixel_rendering));
WriteParam(m, p.focus_ring_color);
WriteParam(m, p.thumb_active_color);
WriteParam(m, p.thumb_inactive_color);
WriteParam(m, p.track_color);
WriteParam(m, p.active_selection_bg_color);
WriteParam(m, p.active_selection_fg_color);
WriteParam(m, p.inactive_selection_bg_color);
WriteParam(m, p.inactive_selection_fg_color);
WriteParam(m, p.browser_handles_top_level_requests);
}
static bool Read(const Message* m, void** iter, param_type* p) {
if (!ReadParam(m, iter, &p->can_accept_load_drops))
return false;
if (!ReadParam(m, iter, &p->should_antialias_text))
return false;
int hinting = 0;
if (!ReadParam(m, iter, &hinting))
return false;
p->hinting = static_cast<RendererPreferencesHintingEnum>(hinting);
int subpixel_rendering = 0;
if (!ReadParam(m, iter, &subpixel_rendering))
return false;
p->subpixel_rendering =
static_cast<RendererPreferencesSubpixelRenderingEnum>(
subpixel_rendering);
int focus_ring_color;
if (!ReadParam(m, iter, &focus_ring_color))
return false;
p->focus_ring_color = focus_ring_color;
int thumb_active_color, thumb_inactive_color, track_color;
int active_selection_bg_color, active_selection_fg_color;
int inactive_selection_bg_color, inactive_selection_fg_color;
if (!ReadParam(m, iter, &thumb_active_color) ||
!ReadParam(m, iter, &thumb_inactive_color) ||
!ReadParam(m, iter, &track_color) ||
!ReadParam(m, iter, &active_selection_bg_color) ||
!ReadParam(m, iter, &active_selection_fg_color) ||
!ReadParam(m, iter, &inactive_selection_bg_color) ||
!ReadParam(m, iter, &inactive_selection_fg_color))
return false;
p->thumb_active_color = thumb_active_color;
p->thumb_inactive_color = thumb_inactive_color;
p->track_color = track_color;
p->active_selection_bg_color = active_selection_bg_color;
p->active_selection_fg_color = active_selection_fg_color;
p->inactive_selection_bg_color = inactive_selection_bg_color;
p->inactive_selection_fg_color = inactive_selection_fg_color;
if (!ReadParam(m, iter, &p->browser_handles_top_level_requests))
return false;
return true;
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<RendererPreferences>");
}
};
// Traits for WebPreferences structure to pack/unpack.
template <>
struct ParamTraits<WebPreferences> {
typedef WebPreferences param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.standard_font_family);
WriteParam(m, p.fixed_font_family);
WriteParam(m, p.serif_font_family);
WriteParam(m, p.sans_serif_font_family);
WriteParam(m, p.cursive_font_family);
WriteParam(m, p.fantasy_font_family);
WriteParam(m, p.default_font_size);
WriteParam(m, p.default_fixed_font_size);
WriteParam(m, p.minimum_font_size);
WriteParam(m, p.minimum_logical_font_size);
WriteParam(m, p.default_encoding);
WriteParam(m, p.javascript_enabled);
WriteParam(m, p.web_security_enabled);
WriteParam(m, p.javascript_can_open_windows_automatically);
WriteParam(m, p.loads_images_automatically);
WriteParam(m, p.plugins_enabled);
WriteParam(m, p.dom_paste_enabled);
WriteParam(m, p.developer_extras_enabled);
WriteParam(m, p.inspector_settings);
WriteParam(m, p.site_specific_quirks_enabled);
WriteParam(m, p.shrinks_standalone_images_to_fit);
WriteParam(m, p.uses_universal_detector);
WriteParam(m, p.text_areas_are_resizable);
WriteParam(m, p.java_enabled);
WriteParam(m, p.allow_scripts_to_close_windows);
WriteParam(m, p.uses_page_cache);
WriteParam(m, p.remote_fonts_enabled);
WriteParam(m, p.xss_auditor_enabled);
WriteParam(m, p.local_storage_enabled);
WriteParam(m, p.databases_enabled);
WriteParam(m, p.application_cache_enabled);
WriteParam(m, p.tabs_to_links);
WriteParam(m, p.user_style_sheet_enabled);
WriteParam(m, p.user_style_sheet_location);
WriteParam(m, p.allow_universal_access_from_file_urls);
WriteParam(m, p.experimental_webgl_enabled);
WriteParam(m, p.geolocation_enabled);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->standard_font_family) &&
ReadParam(m, iter, &p->fixed_font_family) &&
ReadParam(m, iter, &p->serif_font_family) &&
ReadParam(m, iter, &p->sans_serif_font_family) &&
ReadParam(m, iter, &p->cursive_font_family) &&
ReadParam(m, iter, &p->fantasy_font_family) &&
ReadParam(m, iter, &p->default_font_size) &&
ReadParam(m, iter, &p->default_fixed_font_size) &&
ReadParam(m, iter, &p->minimum_font_size) &&
ReadParam(m, iter, &p->minimum_logical_font_size) &&
ReadParam(m, iter, &p->default_encoding) &&
ReadParam(m, iter, &p->javascript_enabled) &&
ReadParam(m, iter, &p->web_security_enabled) &&
ReadParam(m, iter, &p->javascript_can_open_windows_automatically) &&
ReadParam(m, iter, &p->loads_images_automatically) &&
ReadParam(m, iter, &p->plugins_enabled) &&
ReadParam(m, iter, &p->dom_paste_enabled) &&
ReadParam(m, iter, &p->developer_extras_enabled) &&
ReadParam(m, iter, &p->inspector_settings) &&
ReadParam(m, iter, &p->site_specific_quirks_enabled) &&
ReadParam(m, iter, &p->shrinks_standalone_images_to_fit) &&
ReadParam(m, iter, &p->uses_universal_detector) &&
ReadParam(m, iter, &p->text_areas_are_resizable) &&
ReadParam(m, iter, &p->java_enabled) &&
ReadParam(m, iter, &p->allow_scripts_to_close_windows) &&
ReadParam(m, iter, &p->uses_page_cache) &&
ReadParam(m, iter, &p->remote_fonts_enabled) &&
ReadParam(m, iter, &p->xss_auditor_enabled) &&
ReadParam(m, iter, &p->local_storage_enabled) &&
ReadParam(m, iter, &p->databases_enabled) &&
ReadParam(m, iter, &p->application_cache_enabled) &&
ReadParam(m, iter, &p->tabs_to_links) &&
ReadParam(m, iter, &p->user_style_sheet_enabled) &&
ReadParam(m, iter, &p->user_style_sheet_location) &&
ReadParam(m, iter, &p->allow_universal_access_from_file_urls) &&
ReadParam(m, iter, &p->experimental_webgl_enabled) &&
ReadParam(m, iter, &p->geolocation_enabled);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<WebPreferences>");
}
};
// Traits for WebDropData
template <>
struct ParamTraits<WebDropData> {
typedef WebDropData param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.identity);
WriteParam(m, p.url);
WriteParam(m, p.url_title);
WriteParam(m, p.download_url);
WriteParam(m, p.file_extension);
WriteParam(m, p.filenames);
WriteParam(m, p.plain_text);
WriteParam(m, p.text_html);
WriteParam(m, p.html_base_url);
WriteParam(m, p.file_description_filename);
WriteParam(m, p.file_contents);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->identity) &&
ReadParam(m, iter, &p->url) &&
ReadParam(m, iter, &p->url_title) &&
ReadParam(m, iter, &p->download_url) &&
ReadParam(m, iter, &p->file_extension) &&
ReadParam(m, iter, &p->filenames) &&
ReadParam(m, iter, &p->plain_text) &&
ReadParam(m, iter, &p->text_html) &&
ReadParam(m, iter, &p->html_base_url) &&
ReadParam(m, iter, &p->file_description_filename) &&
ReadParam(m, iter, &p->file_contents);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<WebDropData>");
}
};
// Traits for AudioManager::Format.
template <>
struct ParamTraits<AudioManager::Format> {
typedef AudioManager::Format param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<AudioManager::Format>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring format;
switch (p) {
case AudioManager::AUDIO_PCM_LINEAR:
format = L"AUDIO_PCM_LINEAR";
break;
case AudioManager::AUDIO_PCM_LOW_LATENCY:
format = L"AUDIO_PCM_LOW_LATENCY";
break;
case AudioManager::AUDIO_MOCK:
format = L"AUDIO_MOCK";
break;
default:
format = L"AUDIO_LAST_FORMAT";
break;
}
LogParam(format, l);
}
};
// Traits for ViewHostMsg_Audio_CreateStream.
template <>
struct ParamTraits<ViewHostMsg_Audio_CreateStream> {
typedef ViewHostMsg_Audio_CreateStream param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.format);
WriteParam(m, p.channels);
WriteParam(m, p.sample_rate);
WriteParam(m, p.bits_per_sample);
WriteParam(m, p.packet_size);
WriteParam(m, p.buffer_capacity);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->format) &&
ReadParam(m, iter, &p->channels) &&
ReadParam(m, iter, &p->sample_rate) &&
ReadParam(m, iter, &p->bits_per_sample) &&
ReadParam(m, iter, &p->packet_size) &&
ReadParam(m, iter, &p->buffer_capacity);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<ViewHostMsg_Audio_CreateStream>(");
LogParam(p.format, l);
l->append(L", ");
LogParam(p.channels, l);
l->append(L", ");
LogParam(p.sample_rate, l);
l->append(L", ");
LogParam(p.bits_per_sample, l);
l->append(L", ");
LogParam(p.packet_size, l);
l->append(L")");
LogParam(p.buffer_capacity, l);
l->append(L")");
}
};
#if defined(OS_POSIX)
// TODO(port): this shouldn't exist. However, the plugin stuff is really using
// HWNDS (NativeView), and making Windows calls based on them. I've not figured
// out the deal with plugins yet.
template <>
struct ParamTraits<gfx::NativeView> {
typedef gfx::NativeView param_type;
static void Write(Message* m, const param_type& p) {
NOTIMPLEMENTED();
}
static bool Read(const Message* m, void** iter, param_type* p) {
NOTIMPLEMENTED();
*p = NULL;
return true;
}
static void Log(const param_type& p, std::wstring* l) {
l->append(StringPrintf(L"<gfx::NativeView>"));
}
};
#endif // defined(OS_POSIX)
template <>
struct ParamTraits<ViewMsg_AudioStreamState> {
typedef ViewMsg_AudioStreamState param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p.state);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
p->state = static_cast<ViewMsg_AudioStreamState::State>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring state;
switch (p.state) {
case ViewMsg_AudioStreamState::kPlaying:
state = L"ViewMsg_AudioStreamState::kPlaying";
break;
case ViewMsg_AudioStreamState::kPaused:
state = L"ViewMsg_AudioStreamState::kPaused";
break;
case ViewMsg_AudioStreamState::kError:
state = L"ViewMsg_AudioStreamState::kError";
break;
default:
state = L"UNKNOWN";
break;
}
LogParam(state, l);
}
};
template <>
struct ParamTraits<ViewMsg_DatabaseOpenFileResponse_Params> {
typedef ViewMsg_DatabaseOpenFileResponse_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.file_handle);
#if defined(OS_POSIX)
WriteParam(m, p.dir_handle);
#endif
}
static bool Read(const Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, &p->file_handle)
#if defined(OS_POSIX)
&& ReadParam(m, iter, &p->dir_handle)
#endif
;
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.file_handle, l);
#if defined(OS_POSIX)
l->append(L", ");
LogParam(p.dir_handle, l);
#endif
l->append(L")");
}
};
template <>
struct ParamTraits<appcache::Status> {
typedef appcache::Status param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(static_cast<int>(p));
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<param_type>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring state;
switch (p) {
case appcache::UNCACHED:
state = L"UNCACHED";
break;
case appcache::IDLE:
state = L"IDLE";
break;
case appcache::CHECKING:
state = L"CHECKING";
break;
case appcache::DOWNLOADING:
state = L"DOWNLOADING";
break;
case appcache::UPDATE_READY:
state = L"UPDATE_READY";
break;
case appcache::OBSOLETE:
state = L"OBSOLETE";
break;
default:
state = L"InvalidStatusValue";
break;
}
LogParam(state, l);
}
};
template <>
struct ParamTraits<appcache::EventID> {
typedef appcache::EventID param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(static_cast<int>(p));
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<param_type>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring state;
switch (p) {
case appcache::CHECKING_EVENT:
state = L"CHECKING_EVENT";
break;
case appcache::ERROR_EVENT:
state = L"ERROR_EVENT";
break;
case appcache::NO_UPDATE_EVENT:
state = L"NO_UPDATE_EVENT";
break;
case appcache::DOWNLOADING_EVENT:
state = L"DOWNLOADING_EVENT";
break;
case appcache::PROGRESS_EVENT:
state = L"PROGRESS_EVENT";
break;
case appcache::UPDATE_READY_EVENT:
state = L"UPDATE_READY_EVENT";
break;
case appcache::CACHED_EVENT:
state = L"CACHED_EVENT";
break;
case appcache::OBSOLETE_EVENT:
state = L"OBSOLETE_EVENT";
break;
default:
state = L"InvalidEventValue";
break;
}
LogParam(state, l);
}
};
template<>
struct ParamTraits<WebMenuItem::Type> {
typedef WebMenuItem::Type param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<WebMenuItem::Type>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring type;
switch (p) {
case WebMenuItem::OPTION:
type = L"OPTION";
break;
case WebMenuItem::GROUP:
type = L"GROUP";
break;
case WebMenuItem::SEPARATOR:
type = L"SEPARATOR";
break;
default:
type = L"UNKNOWN";
break;
}
LogParam(type, l);
}
};
template<>
struct ParamTraits<WebMenuItem> {
typedef WebMenuItem param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.label);
WriteParam(m, p.type);
WriteParam(m, p.enabled);
WriteParam(m, p.checked);
WriteParam(m, p.action);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->label) &&
ReadParam(m, iter, &p->type) &&
ReadParam(m, iter, &p->enabled) &&
ReadParam(m, iter, &p->checked) &&
ReadParam(m, iter, &p->action);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.label, l);
l->append(L", ");
LogParam(p.type, l);
l->append(L", ");
LogParam(p.enabled, l);
l->append(L", ");
LogParam(p.checked, l);
l->append(L", ");
LogParam(p.action, l);
l->append(L")");
}
};
// Traits for ViewHostMsg_ShowPopup_Params.
template <>
struct ParamTraits<ViewHostMsg_ShowPopup_Params> {
typedef ViewHostMsg_ShowPopup_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.bounds);
WriteParam(m, p.item_height);
WriteParam(m, p.selected_item);
WriteParam(m, p.popup_items);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->bounds) &&
ReadParam(m, iter, &p->item_height) &&
ReadParam(m, iter, &p->selected_item) &&
ReadParam(m, iter, &p->popup_items);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.bounds, l);
l->append(L", ");
LogParam(p.item_height, l);
l->append(L", ");
LogParam(p.selected_item, l);
l->append(L", ");
LogParam(p.popup_items, l);
l->append(L")");
}
};
// Traits for ViewHostMsg_ScriptedPrint_Params.
template <>
struct ParamTraits<ViewHostMsg_ScriptedPrint_Params> {
typedef ViewHostMsg_ScriptedPrint_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.routing_id);
WriteParam(m, p.host_window_id);
WriteParam(m, p.cookie);
WriteParam(m, p.expected_pages_count);
WriteParam(m, p.has_selection);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->routing_id) &&
ReadParam(m, iter, &p->host_window_id) &&
ReadParam(m, iter, &p->cookie) &&
ReadParam(m, iter, &p->expected_pages_count) &&
ReadParam(m, iter, &p->has_selection);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.routing_id, l);
l->append(L", ");
LogParam(p.host_window_id, l);
l->append(L", ");
LogParam(p.cookie, l);
l->append(L", ");
LogParam(p.expected_pages_count, l);
l->append(L", ");
LogParam(p.has_selection, l);
l->append(L")");
}
};
template <>
struct SimilarTypeTraits<ViewType::Type> {
typedef int Type;
};
// Traits for URLPattern.
template <>
struct ParamTraits<URLPattern> {
typedef URLPattern param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.GetAsString());
}
static bool Read(const Message* m, void** iter, param_type* p) {
std::string spec;
if (!ReadParam(m, iter, &spec))
return false;
return p->Parse(spec);
}
static void Log(const param_type& p, std::wstring* l) {
LogParam(p.GetAsString(), l);
}
};
template <>
struct ParamTraits<Clipboard::Buffer> {
typedef Clipboard::Buffer param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int buffer;
if (!m->ReadInt(iter, &buffer) || !Clipboard::IsValidBuffer(buffer))
return false;
*p = Clipboard::FromInt(buffer);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring type;
switch (p) {
case Clipboard::BUFFER_STANDARD:
type = L"BUFFER_STANDARD";
break;
#if defined(OS_LINUX)
case Clipboard::BUFFER_SELECTION:
type = L"BUFFER_SELECTION";
break;
#endif
default:
type = L"UNKNOWN";
break;
}
LogParam(type, l);
}
};
// Traits for EditCommand structure.
template <>
struct ParamTraits<EditCommand> {
typedef EditCommand param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.name);
WriteParam(m, p.value);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, &p->name) && ReadParam(m, iter, &p->value);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.name, l);
l->append(L":");
LogParam(p.value, l);
l->append(L")");
}
};
// Traits for DOMStorageType enum.
template <>
struct ParamTraits<DOMStorageType> {
typedef DOMStorageType param_type;
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
static bool Read(const Message* m, void** iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
*p = static_cast<param_type>(type);
return true;
}
static void Log(const param_type& p, std::wstring* l) {
std::wstring control;
switch (p) {
case DOM_STORAGE_LOCAL:
control = L"DOM_STORAGE_LOCAL";
break;
case DOM_STORAGE_SESSION:
control = L"DOM_STORAGE_SESSION";
break;
default:
NOTIMPLEMENTED();
control = L"UNKNOWN";
break;
}
LogParam(control, l);
}
};
// Traits for ViewMsg_DOMStorageEvent_Params.
template <>
struct ParamTraits<ViewMsg_DOMStorageEvent_Params> {
typedef ViewMsg_DOMStorageEvent_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.key_);
WriteParam(m, p.old_value_);
WriteParam(m, p.new_value_);
WriteParam(m, p.origin_);
WriteParam(m, p.url_);
WriteParam(m, p.storage_type_);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->key_) &&
ReadParam(m, iter, &p->old_value_) &&
ReadParam(m, iter, &p->new_value_) &&
ReadParam(m, iter, &p->origin_) &&
ReadParam(m, iter, &p->url_) &&
ReadParam(m, iter, &p->storage_type_);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.key_, l);
l->append(L", ");
LogParam(p.old_value_, l);
l->append(L", ");
LogParam(p.new_value_, l);
l->append(L", ");
LogParam(p.origin_, l);
l->append(L", ");
LogParam(p.url_, l);
l->append(L", ");
LogParam(p.storage_type_, l);
l->append(L")");
}
};
// Traits for ViewHostMsg_CreateWorker_Params
template <>
struct ParamTraits<ViewHostMsg_CreateWorker_Params> {
typedef ViewHostMsg_CreateWorker_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.url);
WriteParam(m, p.is_shared);
WriteParam(m, p.name);
WriteParam(m, p.document_id);
WriteParam(m, p.render_view_route_id);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->url) &&
ReadParam(m, iter, &p->is_shared) &&
ReadParam(m, iter, &p->name) &&
ReadParam(m, iter, &p->document_id) &&
ReadParam(m, iter, &p->render_view_route_id);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.url, l);
l->append(L", ");
LogParam(p.is_shared, l);
l->append(L", ");
LogParam(p.name, l);
l->append(L", ");
LogParam(p.document_id, l);
l->append(L", ");
LogParam(p.render_view_route_id, l);
l->append(L")");
}
};
// Traits for WebCookie
template <>
struct ParamTraits<webkit_glue::WebCookie> {
typedef webkit_glue::WebCookie param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.name);
WriteParam(m, p.value);
WriteParam(m, p.domain);
WriteParam(m, p.path);
WriteParam(m, p.expires);
WriteParam(m, p.http_only);
WriteParam(m, p.secure);
WriteParam(m, p.session);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->name) &&
ReadParam(m, iter, &p->value) &&
ReadParam(m, iter, &p->domain) &&
ReadParam(m, iter, &p->path) &&
ReadParam(m, iter, &p->expires) &&
ReadParam(m, iter, &p->http_only) &&
ReadParam(m, iter, &p->secure) &&
ReadParam(m, iter, &p->session);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<WebCookie>");
}
};
template<>
struct ParamTraits<ViewMsg_ExecuteCode_Params> {
typedef ViewMsg_ExecuteCode_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.request_id);
WriteParam(m, p.extension_id);
WriteParam(m, p.host_permissions);
WriteParam(m, p.is_javascript);
WriteParam(m, p.code);
WriteParam(m, p.all_frames);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->request_id) &&
ReadParam(m, iter, &p->extension_id) &&
ReadParam(m, iter, &p->host_permissions) &&
ReadParam(m, iter, &p->is_javascript) &&
ReadParam(m, iter, &p->code) &&
ReadParam(m, iter, &p->all_frames);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"<ViewMsg_ExecuteCode_Params>");
}
};
template<>
struct ParamTraits<ViewMsg_New_Params> {
typedef ViewMsg_New_Params param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.parent_window);
WriteParam(m, p.renderer_preferences);
WriteParam(m, p.web_preferences);
WriteParam(m, p.view_id);
WriteParam(m, p.session_storage_namespace_id);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->parent_window) &&
ReadParam(m, iter, &p->renderer_preferences) &&
ReadParam(m, iter, &p->web_preferences) &&
ReadParam(m, iter, &p->view_id) &&
ReadParam(m, iter, &p->session_storage_namespace_id);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.parent_window, l);
l->append(L", ");
LogParam(p.renderer_preferences, l);
l->append(L", ");
LogParam(p.web_preferences, l);
l->append(L", ");
LogParam(p.view_id, l);
l->append(L", ");
LogParam(p.session_storage_namespace_id, l);
l->append(L")");
}
};
template<>
struct ParamTraits<ViewHostMsg_TranslateTextParam> {
typedef ViewHostMsg_TranslateTextParam param_type;
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.routing_id);
WriteParam(m, p.work_id);
WriteParam(m, p.page_id);
WriteParam(m, p.text_chunks);
WriteParam(m, p.from_language);
WriteParam(m, p.to_language);
WriteParam(m, p.secure);
}
static bool Read(const Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->routing_id) &&
ReadParam(m, iter, &p->work_id) &&
ReadParam(m, iter, &p->page_id) &&
ReadParam(m, iter, &p->text_chunks) &&
ReadParam(m, iter, &p->from_language) &&
ReadParam(m, iter, &p->to_language) &&
ReadParam(m, iter, &p->secure);
}
static void Log(const param_type& p, std::wstring* l) {
l->append(L"(");
LogParam(p.routing_id, l);
l->append(L", ");
LogParam(p.work_id, l);
l->append(L", ");
LogParam(p.page_id, l);
l->append(L", ");
LogParam(p.text_chunks, l);
l->append(L", ");
LogParam(p.from_language, l);
l->append(L", ");
LogParam(p.to_language, l);
l->append(L", ");
LogParam(p.secure, l);
l->append(L")");
}
};
} // namespace IPC
#define MESSAGES_INTERNAL_FILE "chrome/common/render_messages_internal.h"
#include "ipc/ipc_message_macros.h"
#endif // CHROME_COMMON_RENDER_MESSAGES_H_