diff options
-rw-r--r-- | content/browser/browser_main_loop.cc | 5 | ||||
-rw-r--r-- | content/browser/loader/async_resource_handler.cc | 6 | ||||
-rw-r--r-- | content/child/child_thread_impl.cc | 4 | ||||
-rw-r--r-- | content/child/resource_dispatcher.cc | 3 | ||||
-rw-r--r-- | content/child/resource_scheduling_filter.cc | 4 | ||||
-rw-r--r-- | content/child/threaded_data_provider.cc | 3 | ||||
-rw-r--r-- | content/common/resource_messages.cc | 16 | ||||
-rw-r--r-- | content/common/resource_messages.h | 4 | ||||
-rw-r--r-- | ipc/ipc_channel.h | 5 | ||||
-rw-r--r-- | ipc/ipc_channel_common.cc | 12 | ||||
-rw-r--r-- | ipc/ipc_channel_reader.cc | 6 | ||||
-rw-r--r-- | ipc/ipc_channel_win.cc | 11 |
12 files changed, 79 insertions, 0 deletions
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc index edc5392..6dd5fac 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc @@ -54,6 +54,7 @@ #include "content/common/content_switches_internal.h" #include "content/common/host_discardable_shared_memory_manager.h" #include "content/common/host_shared_bitmap_manager.h" +#include "content/common/resource_messages.h" #include "content/public/browser/browser_main_parts.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/render_process_host.h" @@ -62,6 +63,7 @@ #include "content/public/common/main_function_params.h" #include "content/public/common/result_codes.h" #include "device/battery/battery_status_service.h" +#include "ipc/ipc_channel.h" #include "media/audio/audio_manager.h" #include "media/base/media.h" #include "media/base/user_input_monitor.h" @@ -1190,6 +1192,9 @@ void BrowserMainLoop::InitializeMainThread() { // Register the main thread by instantiating it, but don't call any methods. main_thread_.reset( new BrowserThreadImpl(BrowserThread::UI, base::MessageLoop::current())); + + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + IPC::Channel::SetMessageVerifier(&content::CheckContentsOfResourceMessage); } int BrowserMainLoop::BrowserThreadsStarted() { diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc index 2eace36..da777dc 100644 --- a/content/browser/loader/async_resource_handler.cc +++ b/content/browser/loader/async_resource_handler.cc @@ -318,6 +318,9 @@ bool AsyncResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { int size; if (!buffer_->ShareToProcess(filter->PeerHandle(), &handle, &size)) return false; + + // TODO(erikchen): Temporary debugging. http://crbug.com/527588. + CHECK_LE(size, kBufferSize); filter->Send(new ResourceMsg_SetDataBuffer( GetRequestID(), handle, size, filter->peer_pid())); sent_first_data_msg_ = true; @@ -329,6 +332,9 @@ bool AsyncResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { int encoded_data_length = current_transfer_size - reported_transfer_size_; reported_transfer_size_ = current_transfer_size; + // TODO(erikchen): Temporary debugging. http://crbug.com/527588. + CHECK_LE(data_offset, kBufferSize); + filter->Send(new ResourceMsg_DataReceived( GetRequestID(), data_offset, bytes_read, encoded_data_length)); ++pending_data_count_; diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc index 07977ba..a82cd35 100644 --- a/content/child/child_thread_impl.cc +++ b/content/child/child_thread_impl.cc @@ -52,9 +52,11 @@ #include "content/common/child_process_messages.h" #include "content/common/in_process_child_thread_params.h" #include "content/common/mojo/mojo_messages.h" +#include "content/common/resource_messages.h" #include "content/public/common/content_switches.h" #include "ipc/attachment_broker.h" #include "ipc/attachment_broker_unprivileged.h" +#include "ipc/ipc_channel.h" #include "ipc/ipc_logging.h" #include "ipc/ipc_platform_file.h" #include "ipc/ipc_switches.h" @@ -413,6 +415,8 @@ void ChildThreadImpl::Init(const Options& options) { if (!IsInBrowserProcess()) IPC::Logging::GetInstance()->SetIPCSender(this); #endif + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + IPC::Channel::SetMessageVerifier(&content::CheckContentsOfResourceMessage); mojo_ipc_support_.reset(new IPC::ScopedIPCSupport(GetIOTaskRunner())); mojo_application_.reset(new MojoApplication(GetIOTaskRunner())); diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc index 92a0962..c3c8cc4 100644 --- a/content/child/resource_dispatcher.cc +++ b/content/child/resource_dispatcher.cc @@ -82,6 +82,9 @@ ResourceDispatcher::~ResourceDispatcher() { } bool ResourceDispatcher::OnMessageReceived(const IPC::Message& message) { + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + content::CheckContentsOfResourceMessage(&message); + if (!IsResourceDispatcherMessage(message)) { return false; } diff --git a/content/child/resource_scheduling_filter.cc b/content/child/resource_scheduling_filter.cc index cad2f7d..9f6283e 100644 --- a/content/child/resource_scheduling_filter.cc +++ b/content/child/resource_scheduling_filter.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/location.h" #include "content/child/resource_dispatcher.h" +#include "content/common/resource_messages.h" #include "ipc/ipc_message.h" #include "ipc/ipc_message_start.h" #include "third_party/WebKit/public/platform/WebTaskRunner.h" @@ -49,6 +50,9 @@ ResourceSchedulingFilter::~ResourceSchedulingFilter() { } bool ResourceSchedulingFilter::OnMessageReceived(const IPC::Message& message) { + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + content::CheckContentsOfResourceMessage(&message); + base::AutoLock lock(request_id_to_task_runner_map_lock_); int request_id; diff --git a/content/child/threaded_data_provider.cc b/content/child/threaded_data_provider.cc index f804cc4..8077552 100644 --- a/content/child/threaded_data_provider.cc +++ b/content/child/threaded_data_provider.cc @@ -81,6 +81,9 @@ void DataProviderMessageFilter::OnFilterAdded(IPC::Sender* sender) { bool DataProviderMessageFilter::OnMessageReceived( const IPC::Message& message) { + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + content::CheckContentsOfResourceMessage(&message); + DCHECK(io_task_runner_->BelongsToCurrentThread()); if (message.type() != ResourceMsg_DataReceived::ID) diff --git a/content/common/resource_messages.cc b/content/common/resource_messages.cc index ba92207..d5eff4c 100644 --- a/content/common/resource_messages.cc +++ b/content/common/resource_messages.cc @@ -4,9 +4,25 @@ #include "content/common/resource_messages.h" +#include "base/debug/alias.h" +#include "ipc/ipc_message.h" #include "net/base/load_timing_info.h" #include "net/http/http_response_headers.h" +namespace content { +// TODO(erikchen): Temporary code to help track http://crbug.com/527588. +void CheckContentsOfResourceMessage(const IPC::Message* message) { + if (message->type() == ResourceMsg_DataReceived::ID) { + ResourceMsg_DataReceived::Schema::Param arg; + bool success = ResourceMsg_DataReceived::Read(message, &arg); + CHECK(success); + int data_offset = base::get<1>(arg); + CHECK_LE(data_offset, 512 * 1024); + base::debug::Alias(&data_offset); + } +} +} + namespace IPC { void ParamTraits<scoped_refptr<net::HttpResponseHeaders> >::Write( diff --git a/content/common/resource_messages.h b/content/common/resource_messages.h index dc4bac4..e015a10 100644 --- a/content/common/resource_messages.h +++ b/content/common/resource_messages.h @@ -29,6 +29,10 @@ struct LoadTimingInfo; namespace content { struct ResourceDevToolsInfo; + +// TODO(erikchen): Temporary code to help track http://crbug.com/527588. +// This method sanity checks the contents of the DataReceived resource message. +void CheckContentsOfResourceMessage(const IPC::Message* m); } namespace IPC { diff --git a/ipc/ipc_channel.h b/ipc/ipc_channel.h index 5345112..58fc069 100644 --- a/ipc/ipc_channel.h +++ b/ipc/ipc_channel.h @@ -157,6 +157,11 @@ class IPC_EXPORT Channel : public Endpoint { ~Channel() override; + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + using MessageVerifier = void (*)(const Message*); + static void SetMessageVerifier(MessageVerifier verifier); + static MessageVerifier GetMessageVerifier(); + // Connect the pipe. On the server side, this will initiate // waiting for connections. On the client, it attempts to // connect to a pre-existing pipe. Note, calling Connect() diff --git a/ipc/ipc_channel_common.cc b/ipc/ipc_channel_common.cc index f841dab..3fddf9a 100644 --- a/ipc/ipc_channel_common.cc +++ b/ipc/ipc_channel_common.cc @@ -6,6 +6,8 @@ namespace IPC { +static Channel::MessageVerifier g_message_verifier = nullptr; + // static scoped_ptr<Channel> Channel::CreateClient( const IPC::ChannelHandle& channel_handle, @@ -47,6 +49,16 @@ scoped_ptr<Channel> Channel::CreateServer( Channel::~Channel() { } +// static +void Channel::SetMessageVerifier(MessageVerifier verifier) { + g_message_verifier = verifier; +} + +// static +Channel::MessageVerifier Channel::GetMessageVerifier() { + return g_message_verifier; +} + bool Channel::IsSendThreadSafe() const { return false; } diff --git a/ipc/ipc_channel_reader.cc b/ipc/ipc_channel_reader.cc index e1cdc47..0783df7 100644 --- a/ipc/ipc_channel_reader.cc +++ b/ipc/ipc_channel_reader.cc @@ -12,6 +12,7 @@ #include "ipc/ipc_message.h" #include "ipc/ipc_message_attachment_set.h" #include "ipc/ipc_message_macros.h" +#include "ipc/ipc_message_start.h" namespace IPC { namespace internal { @@ -163,6 +164,11 @@ bool ChannelReader::TranslateInputData(const char* input_data, bool ChannelReader::HandleTranslatedMessage( Message* translated_message, const AttachmentIdVector& attachment_ids) { + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + Channel::MessageVerifier verifier = Channel::GetMessageVerifier(); + if (verifier) + verifier(translated_message); + // Immediately handle internal messages. if (IsInternalMessage(*translated_message)) { EmitLogBeforeDispatch(*translated_message); diff --git a/ipc/ipc_channel_win.cc b/ipc/ipc_channel_win.cc index 19f7cb5..a9079ef 100644 --- a/ipc/ipc_channel_win.cc +++ b/ipc/ipc_channel_win.cc @@ -489,6 +489,17 @@ bool ChannelWin::ProcessOutgoingMessages( // Write to pipe... OutputElement* element = output_queue_.front(); + + // TODO(erikchen): Temporary code to help track http://crbug.com/527588. + { + const Message* m = element->get_message(); + if (m) { + Channel::MessageVerifier verifier = Channel::GetMessageVerifier(); + if (verifier) + verifier(m); + } + } + DCHECK(element->size() <= INT_MAX); BOOL ok = WriteFile(pipe_.Get(), element->data(), |