search_provider_install_state_message_filter.cc revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/search_engines/search_provider_install_state_message_filter.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/logging.h" 821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/renderer_host/render_process_host.h" 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/renderer_host/render_view_host.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/notification_source.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/notification_type.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/render_messages.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/render_messages_params.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "googleurl/src/gurl.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenSearchProviderInstallStateMessageFilter:: 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenSearchProviderInstallStateMessageFilter( 1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int render_process_id, 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Profile* profile) 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : ALLOW_THIS_IN_INITIALIZER_LIST( 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_with_provider_install_state_factory_(this)), 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen provider_data_(profile->GetWebDataService(Profile::EXPLICIT_ACCESS), 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationType::RENDERER_PROCESS_TERMINATED, 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Source<RenderProcessHost>( 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen RenderProcessHost::FromID(render_process_id))), 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen is_off_the_record_(profile->IsOffTheRecord()) { 2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // This is initialized by BrowserRenderProcessHost. Do not add any non-trivial 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // initialization here. Instead do it lazily when required. 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenSearchProviderInstallStateMessageFilter:: 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen~SearchProviderInstallStateMessageFilter() { 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool SearchProviderInstallStateMessageFilter::OnMessageReceived( 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const IPC::Message& message, 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* message_was_ok) { 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool handled = true; 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen IPC_BEGIN_MESSAGE_MAP_EX(SearchProviderInstallStateMessageFilter, message, 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *message_was_ok) 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetSearchProviderInstallState, 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnMsgGetSearchProviderInstallState) 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_UNHANDLED(handled = false) 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_END_MESSAGE_MAP() 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return handled; 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenViewHostMsg_GetSearchProviderInstallState_Params 5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenSearchProviderInstallStateMessageFilter::GetSearchProviderInstallState( 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& page_location, 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& requested_host) { 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL requested_origin = requested_host.GetOrigin(); 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Do the security check before any others to avoid information leaks. 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (page_location.GetOrigin() != requested_origin) 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return ViewHostMsg_GetSearchProviderInstallState_Params::Denied(); 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // In incognito mode, no search information is exposed. (This check must be 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // done after the security check or else a web site can detect that the 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // user is in incognito mode just by doing a cross origin request.) 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (is_off_the_record_) 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return ViewHostMsg_GetSearchProviderInstallState_Params::NotInstalled(); 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen switch (provider_data_.GetInstallState(requested_origin)) { 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case SearchProviderInstallData::NOT_INSTALLED: 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return ViewHostMsg_GetSearchProviderInstallState_Params:: 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotInstalled(); 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case SearchProviderInstallData::INSTALLED_BUT_NOT_DEFAULT: 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return ViewHostMsg_GetSearchProviderInstallState_Params:: 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InstallButNotDefault(); 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen case SearchProviderInstallData::INSTALLED_AS_DEFAULT: 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return ViewHostMsg_GetSearchProviderInstallState_Params:: 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InstalledAsDefault(); 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NOTREACHED(); 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return ViewHostMsg_GetSearchProviderInstallState_Params:: 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotInstalled(); 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid 8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenSearchProviderInstallStateMessageFilter::OnMsgGetSearchProviderInstallState( 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& page_location, 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& requested_host, 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_msg) { 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen provider_data_.CallWhenLoaded( 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_with_provider_install_state_factory_.NewRunnableMethod( 9421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen &SearchProviderInstallStateMessageFilter:: 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ReplyWithProviderInstallState, 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen page_location, 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen requested_host, 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_msg)); 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid SearchProviderInstallStateMessageFilter::ReplyWithProviderInstallState( 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& page_location, 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& requested_host, 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_msg) { 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(reply_msg); 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ViewHostMsg_GetSearchProviderInstallState_Params install_state = 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetSearchProviderInstallState(page_location, requested_host); 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ViewHostMsg_GetSearchProviderInstallState::WriteReplyParams( 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_msg, 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen install_state); 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_msg); 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 114