Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / common / swapped_out_messages.cc
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.
4
5 #include "content/common/swapped_out_messages.h"
6
7 #include "content/common/accessibility_messages.h"
8 #include "content/common/frame_messages.h"
9 #include "content/common/input_messages.h"
10 #include "content/common/view_messages.h"
11 #include "content/public/common/content_client.h"
12
13 namespace content {
14
15 bool SwappedOutMessages::CanSendWhileSwappedOut(const IPC::Message* msg) {
16   // We filter out most IPC messages when swapped out.  However, some are
17   // important (e.g., ACKs) for keeping the browser and renderer state
18   // consistent in case we later return to the same renderer.
19   switch (msg->type()) {
20     // Handled by RenderWidgetHost.
21     case InputHostMsg_HandleInputEvent_ACK::ID:
22     case ViewHostMsg_UpdateRect::ID:
23     // Allow targeted navigations while swapped out.
24     case FrameHostMsg_OpenURL::ID:
25     case ViewHostMsg_Focus::ID:
26     // Handled by RenderViewHost.
27     case ViewHostMsg_RenderProcessGone::ID:
28     case ViewHostMsg_ClosePage_ACK::ID:
29     case ViewHostMsg_SwapCompositorFrame::ID:
30     case ViewHostMsg_UpdateIsDelayed::ID:
31     case ViewHostMsg_DidActivateAcceleratedCompositing::ID:
32     // Handled by WorkerMessageFilter (or by SharedWorkerMessageFilter when
33     // embedded-shared-worker is enabled).
34     case ViewHostMsg_DocumentDetached::ID:
35     // Allow cross-process JavaScript calls.
36     case ViewHostMsg_RouteCloseEvent::ID:
37     case ViewHostMsg_RouteMessageEvent::ID:
38     // Handled by RenderFrameHost.
39     case FrameHostMsg_BeforeUnload_ACK::ID:
40     case FrameHostMsg_SwapOut_ACK::ID:
41     // Frame detach must occur after the RenderView has swapped out.
42     case FrameHostMsg_Detach::ID:
43     case FrameHostMsg_DomOperationResponse::ID:
44     case FrameHostMsg_CompositorFrameSwappedACK::ID:
45     case FrameHostMsg_BuffersSwappedACK::ID:
46     case FrameHostMsg_ReclaimCompositorResources::ID:
47     // Input events propagate from parent to child.
48     case FrameHostMsg_ForwardInputEvent::ID:
49     case FrameHostMsg_InitializeChildFrame::ID:
50       return true;
51     default:
52       break;
53   }
54
55   // Check with the embedder as well.
56   ContentClient* client = GetContentClient();
57   return client->CanSendWhileSwappedOut(msg);
58 }
59
60 bool SwappedOutMessages::CanHandleWhileSwappedOut(
61     const IPC::Message& msg) {
62   // Any message the renderer is allowed to send while swapped out should
63   // be handled by the browser.
64   if (CanSendWhileSwappedOut(&msg))
65     return true;
66
67   // We drop most other messages that arrive from a swapped out renderer.
68   // However, some are important (e.g., ACKs) for keeping the browser and
69   // renderer state consistent in case we later return to the renderer.
70   // Note that synchronous messages that are not handled will receive an
71   // error reply instead, to avoid leaving the renderer in a stuck state.
72   switch (msg.type()) {
73     // Sends an ACK.
74     case ViewHostMsg_ShowView::ID:
75     // Sends an ACK.
76     case ViewHostMsg_ShowWidget::ID:
77     // Sends an ACK.
78     case ViewHostMsg_ShowFullscreenWidget::ID:
79     // Updates browser state.
80     case ViewHostMsg_RenderViewReady::ID:
81     // Updates the previous navigation entry.
82     case ViewHostMsg_UpdateState::ID:
83     // Sends an ACK.
84     case ViewHostMsg_UpdateTargetURL::ID:
85     // We allow closing even if we are in the process of swapping out.
86     case ViewHostMsg_Close::ID:
87     // Sends an ACK.
88     case ViewHostMsg_RequestMove::ID:
89     // Sends an ACK.
90     case AccessibilityHostMsg_Events::ID:
91       return true;
92     default:
93       break;
94   }
95
96   return false;
97 }
98
99 }  // namespace content