Index: extensions/browser/guest_view/app_view/app_view_guest.cc |
diff --git a/extensions/browser/guest_view/app_view/app_view_guest.cc b/extensions/browser/guest_view/app_view/app_view_guest.cc |
index 108b9b3e2c0092de4954d070dff88d7ec48d277f..58119e152e3d80ae844166ed9a394d9a76eb79bf 100644 |
--- a/extensions/browser/guest_view/app_view/app_view_guest.cc |
+++ b/extensions/browser/guest_view/app_view/app_view_guest.cc |
@@ -6,11 +6,12 @@ |
#include "base/command_line.h" |
#include "components/guest_view/browser/guest_view_manager.h" |
-#include "content/public/browser/render_view_host.h" |
+#include "content/public/browser/render_process_host.h" |
#include "content/public/common/renderer_preferences.h" |
#include "extensions/browser/api/app_runtime/app_runtime_api.h" |
#include "extensions/browser/api/extensions_api_client.h" |
#include "extensions/browser/app_window/app_delegate.h" |
+#include "extensions/browser/bad_message.h" |
#include "extensions/browser/event_router.h" |
#include "extensions/browser/extension_host.h" |
#include "extensions/browser/extension_registry.h" |
@@ -63,20 +64,27 @@ bool AppViewGuest::CompletePendingRequest( |
content::BrowserContext* browser_context, |
const GURL& url, |
int guest_instance_id, |
- const std::string& guest_extension_id) { |
+ const std::string& guest_extension_id, |
+ content::RenderProcessHost* guest_render_process_host) { |
PendingResponseMap* response_map = pending_response_map.Pointer(); |
PendingResponseMap::iterator it = response_map->find(guest_instance_id); |
+ // Kill the requesting process if it is not the real guest. |
if (it == response_map->end()) { |
- // TODO(fsamuel): An app is sending invalid responses. We should probably |
- // kill it. |
+ // The requester used an invalid |guest_instance_id|. |
+ bad_message::ReceivedBadMessage(guest_render_process_host, |
+ bad_message::AVG_BAD_INST_ID); |
return false; |
} |
linked_ptr<ResponseInfo> response_info = it->second; |
if (!response_info->app_view_guest || |
(response_info->guest_extension->id() != guest_extension_id)) { |
- // TODO(fsamuel): An app is trying to respond to an <appview> that didn't |
- // initiate communication with it. We should kill the app here. |
+ // The app is trying to communicate with an <appview> not assigned to it, or |
+ // the <appview> is already dead "nullptr". |
+ bad_message::BadMessageReason reason = !response_info->app_view_guest |
+ ? bad_message::AVG_NULL_AVG |
+ : bad_message::AVG_BAD_EXT_ID; |
+ bad_message::ReceivedBadMessage(guest_render_process_host, reason); |
return false; |
} |
@@ -270,4 +278,12 @@ void AppViewGuest::SetAppDelegateForTest(AppDelegate* delegate) { |
app_delegate_.reset(delegate); |
} |
+std::vector<int> AppViewGuest::GetAllRegisteredInstanceIdsForTesting() { |
+ std::vector<int> instances; |
+ for (const auto& key_value : pending_response_map.Get()) { |
+ instances.push_back(key_value.first); |
+ } |
+ return instances; |
+} |
+ |
} // namespace extensions |