// Copyright (c) 2012 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. // IPC messages for resource loading. // // NOTE: All messages must send an |int request_id| as their first parameter. // Multiply-included message file, hence no include guard. #include #include "base/memory/shared_memory.h" #include "base/process/process.h" #include "content/common/content_param_traits_macros.h" #include "content/common/navigation_params.h" #include "content/common/resource_request.h" #include "content/common/resource_request_body_impl.h" #include "content/common/resource_request_completion_status.h" #include "content/common/service_worker/service_worker_types.h" #include "content/public/common/common_param_traits.h" #include "content/public/common/resource_response.h" #include "ipc/ipc_message_macros.h" #include "net/base/request_priority.h" #include "net/cert/ct_policy_status.h" #include "net/cert/signed_certificate_timestamp.h" #include "net/cert/signed_certificate_timestamp_and_status.h" #include "net/http/http_response_info.h" #include "net/ssl/ssl_info.h" #include "net/url_request/redirect_info.h" #include "third_party/WebKit/public/platform/WebMixedContentContextType.h" #ifndef CONTENT_COMMON_RESOURCE_MESSAGES_H_ #define CONTENT_COMMON_RESOURCE_MESSAGES_H_ namespace net { struct LoadTimingInfo; } namespace content { struct ResourceDevToolsInfo; } namespace IPC { template <> struct ParamTraits > { typedef scoped_refptr param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; template <> struct CONTENT_EXPORT ParamTraits { typedef net::SSLInfo param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; template <> struct CONTENT_EXPORT ParamTraits { typedef net::HashValue param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; template <> struct CONTENT_EXPORT ParamTraits { typedef storage::DataElement param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; template <> struct ParamTraits > { typedef scoped_refptr param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; template <> struct ParamTraits { typedef net::LoadTimingInfo param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; template <> struct ParamTraits> { typedef scoped_refptr param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; template <> struct ParamTraits> { typedef scoped_refptr param_type; static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r); static void Log(const param_type& p, std::string* l); }; } // namespace IPC #endif // CONTENT_COMMON_RESOURCE_MESSAGES_H_ #define IPC_MESSAGE_START ResourceMsgStart #undef IPC_MESSAGE_EXPORT #define IPC_MESSAGE_EXPORT CONTENT_EXPORT IPC_ENUM_TRAITS_MAX_VALUE( \ net::HttpResponseInfo::ConnectionInfo, \ net::HttpResponseInfo::NUM_OF_CONNECTION_INFOS - 1) IPC_ENUM_TRAITS_MAX_VALUE(net::TokenBindingParam, net::TB_PARAM_ECDSAP256) IPC_ENUM_TRAITS_MAX_VALUE(net::SSLInfo::HandshakeType, net::SSLInfo::HANDSHAKE_FULL) IPC_ENUM_TRAITS_MAX_VALUE(net::ct::EVPolicyCompliance, net::ct::EVPolicyCompliance::EV_POLICY_MAX) IPC_ENUM_TRAITS_MAX_VALUE( net::ct::CertPolicyCompliance, net::ct::CertPolicyCompliance::CERT_POLICY_BUILD_NOT_TIMELY) IPC_ENUM_TRAITS_MAX_VALUE(net::OCSPVerifyResult::ResponseStatus, net::OCSPVerifyResult::PARSE_RESPONSE_DATA_ERROR) IPC_ENUM_TRAITS_MAX_VALUE(net::OCSPRevocationStatus, net::OCSPRevocationStatus::UNKNOWN) IPC_ENUM_TRAITS_MAX_VALUE(content::FetchRequestMode, content::FETCH_REQUEST_MODE_LAST) IPC_ENUM_TRAITS_MAX_VALUE(content::FetchCredentialsMode, content::FETCH_CREDENTIALS_MODE_LAST) IPC_ENUM_TRAITS_MAX_VALUE(content::FetchRedirectMode, content::FetchRedirectMode::LAST) IPC_ENUM_TRAITS_MAX_VALUE(content::ServiceWorkerMode, content::ServiceWorkerMode::LAST) IPC_ENUM_TRAITS_MAX_VALUE(blink::WebMixedContentContextType, blink::WebMixedContentContextType::kLast) IPC_STRUCT_TRAITS_BEGIN(content::ResourceResponseHead) IPC_STRUCT_TRAITS_PARENT(content::ResourceResponseInfo) IPC_STRUCT_TRAITS_MEMBER(request_start) IPC_STRUCT_TRAITS_MEMBER(response_start) IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(content::SyncLoadResult) IPC_STRUCT_TRAITS_PARENT(content::ResourceResponseHead) IPC_STRUCT_TRAITS_MEMBER(error_code) IPC_STRUCT_TRAITS_MEMBER(final_url) IPC_STRUCT_TRAITS_MEMBER(data) IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(content::ResourceResponseInfo) IPC_STRUCT_TRAITS_MEMBER(request_time) IPC_STRUCT_TRAITS_MEMBER(response_time) IPC_STRUCT_TRAITS_MEMBER(headers) IPC_STRUCT_TRAITS_MEMBER(mime_type) IPC_STRUCT_TRAITS_MEMBER(charset) IPC_STRUCT_TRAITS_MEMBER(has_major_certificate_errors) IPC_STRUCT_TRAITS_MEMBER(content_length) IPC_STRUCT_TRAITS_MEMBER(encoded_data_length) IPC_STRUCT_TRAITS_MEMBER(encoded_body_length) IPC_STRUCT_TRAITS_MEMBER(appcache_id) IPC_STRUCT_TRAITS_MEMBER(appcache_manifest_url) IPC_STRUCT_TRAITS_MEMBER(load_timing) IPC_STRUCT_TRAITS_MEMBER(devtools_info) IPC_STRUCT_TRAITS_MEMBER(download_file_path) IPC_STRUCT_TRAITS_MEMBER(was_fetched_via_spdy) IPC_STRUCT_TRAITS_MEMBER(was_alpn_negotiated) IPC_STRUCT_TRAITS_MEMBER(was_alternate_protocol_available) IPC_STRUCT_TRAITS_MEMBER(connection_info) IPC_STRUCT_TRAITS_MEMBER(alpn_negotiated_protocol) IPC_STRUCT_TRAITS_MEMBER(socket_address) IPC_STRUCT_TRAITS_MEMBER(was_fetched_via_service_worker) IPC_STRUCT_TRAITS_MEMBER(was_fallback_required_by_service_worker) IPC_STRUCT_TRAITS_MEMBER(url_list_via_service_worker) IPC_STRUCT_TRAITS_MEMBER(response_type_via_service_worker) IPC_STRUCT_TRAITS_MEMBER(service_worker_start_time) IPC_STRUCT_TRAITS_MEMBER(service_worker_ready_time) IPC_STRUCT_TRAITS_MEMBER(is_in_cache_storage) IPC_STRUCT_TRAITS_MEMBER(cache_storage_cache_name) IPC_STRUCT_TRAITS_MEMBER(did_service_worker_navigation_preload) IPC_STRUCT_TRAITS_MEMBER(previews_state) IPC_STRUCT_TRAITS_MEMBER(effective_connection_type) IPC_STRUCT_TRAITS_MEMBER(certificate) IPC_STRUCT_TRAITS_MEMBER(cert_status) IPC_STRUCT_TRAITS_MEMBER(ssl_connection_status) IPC_STRUCT_TRAITS_MEMBER(ssl_key_exchange_group) IPC_STRUCT_TRAITS_MEMBER(signed_certificate_timestamps) IPC_STRUCT_TRAITS_MEMBER(cors_exposed_header_names) IPC_STRUCT_TRAITS_END() IPC_ENUM_TRAITS_MAX_VALUE(net::URLRequest::ReferrerPolicy, net::URLRequest::MAX_REFERRER_POLICY - 1) IPC_STRUCT_TRAITS_BEGIN(net::RedirectInfo) IPC_STRUCT_TRAITS_MEMBER(status_code) IPC_STRUCT_TRAITS_MEMBER(new_method) IPC_STRUCT_TRAITS_MEMBER(new_url) IPC_STRUCT_TRAITS_MEMBER(new_first_party_for_cookies) IPC_STRUCT_TRAITS_MEMBER(new_referrer) IPC_STRUCT_TRAITS_MEMBER(new_referrer_policy) IPC_STRUCT_TRAITS_MEMBER(referred_token_binding_host) IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(net::SignedCertificateTimestampAndStatus) IPC_STRUCT_TRAITS_MEMBER(sct) IPC_STRUCT_TRAITS_MEMBER(status) IPC_STRUCT_TRAITS_END() IPC_ENUM_TRAITS_MAX_VALUE(net::ct::SCTVerifyStatus, net::ct::SCT_STATUS_MAX) IPC_STRUCT_TRAITS_BEGIN(content::ResourceRequest) IPC_STRUCT_TRAITS_MEMBER(method) IPC_STRUCT_TRAITS_MEMBER(url) IPC_STRUCT_TRAITS_MEMBER(first_party_for_cookies) IPC_STRUCT_TRAITS_MEMBER(request_initiator) IPC_STRUCT_TRAITS_MEMBER(referrer) IPC_STRUCT_TRAITS_MEMBER(referrer_policy) IPC_STRUCT_TRAITS_MEMBER(visibility_state) IPC_STRUCT_TRAITS_MEMBER(headers) IPC_STRUCT_TRAITS_MEMBER(load_flags) IPC_STRUCT_TRAITS_MEMBER(origin_pid) IPC_STRUCT_TRAITS_MEMBER(resource_type) IPC_STRUCT_TRAITS_MEMBER(priority) IPC_STRUCT_TRAITS_MEMBER(request_context) IPC_STRUCT_TRAITS_MEMBER(appcache_host_id) IPC_STRUCT_TRAITS_MEMBER(should_reset_appcache) IPC_STRUCT_TRAITS_MEMBER(service_worker_provider_id) IPC_STRUCT_TRAITS_MEMBER(originated_from_service_worker) IPC_STRUCT_TRAITS_MEMBER(service_worker_mode) IPC_STRUCT_TRAITS_MEMBER(fetch_request_mode) IPC_STRUCT_TRAITS_MEMBER(fetch_credentials_mode) IPC_STRUCT_TRAITS_MEMBER(fetch_redirect_mode) IPC_STRUCT_TRAITS_MEMBER(fetch_request_context_type) IPC_STRUCT_TRAITS_MEMBER(fetch_mixed_content_context_type) IPC_STRUCT_TRAITS_MEMBER(fetch_frame_type) IPC_STRUCT_TRAITS_MEMBER(request_body) IPC_STRUCT_TRAITS_MEMBER(download_to_file) IPC_STRUCT_TRAITS_MEMBER(has_user_gesture) IPC_STRUCT_TRAITS_MEMBER(enable_load_timing) IPC_STRUCT_TRAITS_MEMBER(enable_upload_progress) IPC_STRUCT_TRAITS_MEMBER(do_not_prompt_for_login) IPC_STRUCT_TRAITS_MEMBER(render_frame_id) IPC_STRUCT_TRAITS_MEMBER(is_main_frame) IPC_STRUCT_TRAITS_MEMBER(parent_is_main_frame) IPC_STRUCT_TRAITS_MEMBER(parent_render_frame_id) IPC_STRUCT_TRAITS_MEMBER(transition_type) IPC_STRUCT_TRAITS_MEMBER(should_replace_current_entry) IPC_STRUCT_TRAITS_MEMBER(transferred_request_child_id) IPC_STRUCT_TRAITS_MEMBER(transferred_request_request_id) IPC_STRUCT_TRAITS_MEMBER(allow_download) IPC_STRUCT_TRAITS_MEMBER(report_raw_headers) IPC_STRUCT_TRAITS_MEMBER(previews_state) IPC_STRUCT_TRAITS_MEMBER(resource_body_stream_url) IPC_STRUCT_TRAITS_MEMBER(initiated_in_secure_context) IPC_STRUCT_TRAITS_MEMBER(download_to_network_cache_only) IPC_STRUCT_TRAITS_END() // Parameters for a ResourceMsg_RequestComplete IPC_STRUCT_TRAITS_BEGIN(content::ResourceRequestCompletionStatus) IPC_STRUCT_TRAITS_MEMBER(error_code) IPC_STRUCT_TRAITS_MEMBER(was_ignored_by_handler) IPC_STRUCT_TRAITS_MEMBER(exists_in_cache) IPC_STRUCT_TRAITS_MEMBER(completion_time) IPC_STRUCT_TRAITS_MEMBER(encoded_data_length) IPC_STRUCT_TRAITS_MEMBER(encoded_body_length) IPC_STRUCT_TRAITS_MEMBER(decoded_body_length) IPC_STRUCT_TRAITS_END() // Resource messages sent from the browser to the renderer. // Sent when the headers are available for a resource request. IPC_MESSAGE_CONTROL2(ResourceMsg_ReceivedResponse, int /* request_id */, content::ResourceResponseHead) // Sent when cached metadata from a resource request is ready. IPC_MESSAGE_CONTROL2(ResourceMsg_ReceivedCachedMetadata, int /* request_id */, std::vector /* data */) // Sent as upload progress is being made. IPC_MESSAGE_CONTROL3(ResourceMsg_UploadProgress, int /* request_id */, int64_t /* position */, int64_t /* size */) // Sent when the request has been redirected. The receiver is expected to // respond with either a FollowRedirect message (if the redirect is to be // followed) or a CancelRequest message (if it should not be followed). IPC_MESSAGE_CONTROL3(ResourceMsg_ReceivedRedirect, int /* request_id */, net::RedirectInfo /* redirect_info */, content::ResourceResponseHead) // Sent to set the shared memory buffer to be used to transmit response data to // the renderer. Subsequent DataReceived messages refer to byte ranges in the // shared memory buffer. The shared memory buffer should be retained by the // renderer until the resource request completes. // // NOTE: The shared memory handle should already be mapped into the process // that receives this message. // // TODO(darin): The |renderer_pid| parameter is just a temporary parameter, // added to help in debugging crbug/160401. // IPC_MESSAGE_CONTROL4(ResourceMsg_SetDataBuffer, int /* request_id */, base::SharedMemoryHandle /* shm_handle */, int /* shm_size */, base::ProcessId /* renderer_pid */) // Sent when some data from a resource request is ready. The data offset and // length specify a byte range into the shared memory buffer provided by the // SetDataBuffer message. IPC_MESSAGE_CONTROL4(ResourceMsg_DataReceived, int /* request_id */, int /* data_offset */, int /* data_length */, int /* encoded_data_length */) // Sent when some data from a resource request has been downloaded to // file. This is only called in the 'download_to_file' case and replaces // ResourceMsg_DataReceived in the call sequence in that case. IPC_MESSAGE_CONTROL3(ResourceMsg_DataDownloaded, int /* request_id */, int /* data_len */, int /* encoded_data_length */) // Sent when the request has been completed. IPC_MESSAGE_CONTROL2(ResourceMsg_RequestComplete, int /* request_id */, content::ResourceRequestCompletionStatus) // Resource messages sent from the renderer to the browser. // Makes a resource request via the browser. IPC_MESSAGE_CONTROL3(ResourceHostMsg_RequestResource, int /* routing_id */, int /* request_id */, content::ResourceRequest) // Cancels a resource request with the ID given as the parameter. IPC_MESSAGE_CONTROL1(ResourceHostMsg_CancelRequest, int /* request_id */) // Follows a redirect that occured for the resource request with the ID given // as the parameter. IPC_MESSAGE_CONTROL1(ResourceHostMsg_FollowRedirect, int /* request_id */) // Makes a synchronous resource request via the browser. IPC_SYNC_MESSAGE_ROUTED2_1(ResourceHostMsg_SyncLoad, int /* request_id */, content::ResourceRequest, content::SyncLoadResult) // Sent when the renderer process is done processing a DataReceived // message. IPC_MESSAGE_CONTROL1(ResourceHostMsg_DataReceived_ACK, int /* request_id */) // Sent by the renderer process to acknowledge receipt of a // UploadProgress message. IPC_MESSAGE_CONTROL1(ResourceHostMsg_UploadProgress_ACK, int /* request_id */) // Sent when the renderer process deletes a resource loader. IPC_MESSAGE_CONTROL1(ResourceHostMsg_ReleaseDownloadedFile, int /* request_id */) // Sent by the renderer when a resource request changes priority. IPC_MESSAGE_CONTROL3(ResourceHostMsg_DidChangePriority, int /* request_id */, net::RequestPriority, int /* intra_priority_value */)