1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/common/swapped_out_messages.h"
7 #include "content/common/accessibility_messages.h"
8 #include "content/common/input_messages.h"
9 #include "content/common/view_messages.h"
10 #include "content/public/common/content_client.h"
14 bool SwappedOutMessages::CanSendWhileSwappedOut(const IPC::Message
* msg
) {
15 // We filter out most IPC messages when swapped out. However, some are
16 // important (e.g., ACKs) for keeping the browser and renderer state
17 // consistent in case we later return to the same renderer.
18 switch (msg
->type()) {
19 // Handled by RenderWidget.
20 case InputHostMsg_HandleInputEvent_ACK::ID
:
21 case ViewHostMsg_PaintAtSize_ACK::ID
:
22 case ViewHostMsg_UpdateRect::ID
:
23 // Allow targeted navigations while swapped out.
24 case ViewHostMsg_OpenURL::ID
:
25 case ViewHostMsg_Focus::ID
:
26 // Handled by RenderView.
27 case ViewHostMsg_RenderProcessGone::ID
:
28 case ViewHostMsg_ShouldClose_ACK::ID
:
29 case ViewHostMsg_SwapOut_ACK::ID
:
30 case ViewHostMsg_ClosePage_ACK::ID
:
31 case ViewHostMsg_DomOperationResponse::ID
:
32 case ViewHostMsg_SwapCompositorFrame::ID
:
33 case ViewHostMsg_UpdateIsDelayed::ID
:
34 case ViewHostMsg_DidActivateAcceleratedCompositing::ID
:
35 // Allow cross-process JavaScript calls.
36 case ViewHostMsg_RouteCloseEvent::ID
:
37 case ViewHostMsg_RouteMessageEvent::ID
:
43 // Check with the embedder as well.
44 ContentClient
* client
= GetContentClient();
45 return client
->CanSendWhileSwappedOut(msg
);
48 bool SwappedOutMessages::CanHandleWhileSwappedOut(
49 const IPC::Message
& msg
) {
50 // Any message the renderer is allowed to send while swapped out should
51 // be handled by the browser.
52 if (CanSendWhileSwappedOut(&msg
))
55 // We drop most other messages that arrive from a swapped out renderer.
56 // However, some are important (e.g., ACKs) for keeping the browser and
57 // renderer state consistent in case we later return to the renderer.
58 // Note that synchronous messages that are not handled will receive an
59 // error reply instead, to avoid leaving the renderer in a stuck state.
62 case ViewHostMsg_ShowView::ID
:
64 case ViewHostMsg_ShowWidget::ID
:
66 case ViewHostMsg_ShowFullscreenWidget::ID
:
67 // Updates browser state.
68 case ViewHostMsg_RenderViewReady::ID
:
69 // Updates the previous navigation entry.
70 case ViewHostMsg_UpdateState::ID
:
72 case ViewHostMsg_UpdateTargetURL::ID
:
73 // We allow closing even if we are in the process of swapping out.
74 case ViewHostMsg_Close::ID
:
76 case ViewHostMsg_RequestMove::ID
:
78 case AccessibilityHostMsg_Events::ID
:
80 // Synchronous message when leaving a page with plugin. In this case,
81 // we want to destroy the plugin rather than return an error message.
82 case ViewHostMsg_DestroyPluginContainer::ID
:
89 // Check with the embedder as well.
90 ContentClient
* client
= GetContentClient();
91 return client
->CanHandleWhileSwappedOut(msg
);
94 } // namespace content