| Index: content/common/swapped_out_messages.cc
|
| diff --git a/content/common/swapped_out_messages.cc b/content/common/swapped_out_messages.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7c7d5cd83e2bf01af9e1e4807da71b70a991ab52
|
| --- /dev/null
|
| +++ b/content/common/swapped_out_messages.cc
|
| @@ -0,0 +1,79 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/common/swapped_out_messages.h"
|
| +
|
| +#include "content/common/content_client.h"
|
| +#include "content/common/view_messages.h"
|
| +
|
| +namespace content {
|
| +
|
| +bool SwappedOutMessages::CanSendWhileSwappedOut(const IPC::Message* msg) {
|
| + // We filter out most IPC messages when swapped out. However, some are
|
| + // important (e.g., ACKs) for keeping the browser and renderer state
|
| + // consistent in case we later return to the same renderer.
|
| + switch (msg->type()) {
|
| + // Handled by RenderWidget.
|
| + case ViewHostMsg_HandleInputEvent_ACK::ID:
|
| + case ViewHostMsg_PaintAtSize_ACK::ID:
|
| + case ViewHostMsg_UpdateRect::ID:
|
| + // Handled by RenderView.
|
| + case ViewHostMsg_RenderViewGone::ID:
|
| + case ViewHostMsg_ShouldClose_ACK::ID:
|
| + case ViewHostMsg_SwapOut_ACK::ID:
|
| + case ViewHostMsg_ClosePage_ACK::ID:
|
| + return true;
|
| + default:
|
| + break;
|
| + }
|
| +
|
| + // Check with the embedder as well.
|
| + ContentClient* client = GetContentClient();
|
| + return client->CanSendWhileSwappedOut(msg);
|
| +}
|
| +
|
| +bool SwappedOutMessages::CanHandleWhileSwappedOut(
|
| + const IPC::Message& msg) {
|
| + // Any message the renderer is allowed to send while swapped out should
|
| + // be handled by the browser.
|
| + if (CanSendWhileSwappedOut(&msg))
|
| + return true;
|
| +
|
| + // We drop most other messages that arrive from a swapped out renderer.
|
| + // However, some are important (e.g., ACKs) for keeping the browser and
|
| + // renderer state consistent in case we later return to the renderer.
|
| + switch (msg.type()) {
|
| + // Sends an ACK.
|
| + case ViewHostMsg_ShowView::ID:
|
| + // Sends an ACK.
|
| + case ViewHostMsg_ShowWidget::ID:
|
| + // Sends an ACK.
|
| + case ViewHostMsg_ShowFullscreenWidget::ID:
|
| + // Updates browser state.
|
| + case ViewHostMsg_RenderViewReady::ID:
|
| + // Updates the previous navigation entry.
|
| + case ViewHostMsg_UpdateState::ID:
|
| + // Sends an ACK.
|
| + case ViewHostMsg_UpdateTargetURL::ID:
|
| + // We allow closing even if we are in the process of swapping out.
|
| + case ViewHostMsg_Close::ID:
|
| + // Sends an ACK.
|
| + case ViewHostMsg_RequestMove::ID:
|
| + // Suppresses dialog and sends an ACK.
|
| + case ViewHostMsg_RunJavaScriptMessage::ID:
|
| + // Suppresses dialog and sends an ACK.
|
| + case ViewHostMsg_RunBeforeUnloadConfirm::ID:
|
| + // Sends an ACK.
|
| + case ViewHostMsg_AccessibilityNotifications::ID:
|
| + return true;
|
| + default:
|
| + break;
|
| + }
|
| +
|
| + // Check with the embedder as well.
|
| + ContentClient* client = GetContentClient();
|
| + return client->CanHandleWhileSwappedOut(msg);
|
| +}
|
| +
|
| +} // namespace content
|
|
|