GPU workaround to simulate Out of Memory errors with large textures
[chromium-blink-merge.git] / content / common / swapped_out_messages.cc
blob3cb20a571aaa89fe58e2888c07f02cb0c85fe517
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/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"
13 namespace content {
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_ClosePage_ACK::ID:
28 case ViewHostMsg_SwapCompositorFrame::ID:
29 // Handled by WorkerMessageFilter (or by SharedWorkerMessageFilter when
30 // embedded-shared-worker is enabled).
31 case ViewHostMsg_DocumentDetached::ID:
32 // Allow cross-process JavaScript calls.
33 case ViewHostMsg_RouteCloseEvent::ID:
34 case ViewHostMsg_RouteMessageEvent::ID:
35 // Handled by RenderFrameHost.
36 case FrameHostMsg_BeforeUnload_ACK::ID:
37 case FrameHostMsg_SwapOut_ACK::ID:
38 case FrameHostMsg_RenderProcessGone::ID:
39 // Frame detach must occur after the RenderView has swapped out.
40 case FrameHostMsg_Detach::ID:
41 case FrameHostMsg_DomOperationResponse::ID:
42 case FrameHostMsg_CompositorFrameSwappedACK::ID:
43 case FrameHostMsg_ReclaimCompositorResources::ID:
44 // Input events propagate from parent to child.
45 case FrameHostMsg_ForwardInputEvent::ID:
46 case FrameHostMsg_InitializeChildFrame::ID:
47 // The browser should always have an accurate mirror of the renderer's
48 // notion of the current page id.
49 case FrameHostMsg_DidAssignPageId::ID:
50 return true;
51 default:
52 break;
55 // Check with the embedder as well.
56 ContentClient* client = GetContentClient();
57 return client->CanSendWhileSwappedOut(msg);
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;
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;
96 return false;
99 } // namespace content