chrome_render_message_filter.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
18bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 28bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 38bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// found in the LICENSE file. 48bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/renderer_host/chrome_render_message_filter.h" 68bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/bind.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind_helpers.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/metrics/histogram.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/browser_process.h" 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/chrome_notification_types.h" 158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/content_settings/tab_specific_content_settings.h" 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/activity_log/activity_action_constants.h" 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/activity_log/activity_actions.h" 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/activity_log/activity_log.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/extensions/api/messaging/message_service.h" 228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/metrics/metrics_service.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/net/chrome_url_request_context.h" 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/net/predictor.h" 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile_manager.h" 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/task_manager/task_manager.h" 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/common/extensions/api/i18n/default_locale_handler.h" 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/common/extensions/extension_file_util.h" 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/extensions/message_bundle.h" 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/common/render_messages.h" 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/browser/notification_service.h" 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "extensions/browser/extension_system.h" 348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "extensions/common/constants.h" 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "extensions/common/extension_messages.h" 368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(USE_TCMALLOC) 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/browser_about_handler.h" 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using content::BrowserThread; 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochusing extensions::APIPermission; 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using blink::WebCache; 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace { 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const uint32 kFilteredMessageClasses[] = { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ChromeMsgStart, 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ExtensionMsgStart, 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Logs an action to the extension activity log for the specified profile. Can 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// be called from any thread. 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void AddActionToExtensionActivityLog( 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile, 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<extensions::Action> action) { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // The ActivityLog can only be accessed from the main (UI) thread. If we're 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // running on the wrong thread, re-dispatch from the main thread. 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BrowserThread::PostTask( 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BrowserThread::UI, FROM_HERE, 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::Bind(&AddActionToExtensionActivityLog, profile, action)); 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!g_browser_process->profile_manager()->IsValidProfile(profile)) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If the action included a URL, check whether it is for an incognito 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // profile. The check is performed here so that it can safely be done from 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the UI thread. 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (action->page_url().is_valid() || !action->page_title().empty()) 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch action->set_page_incognito(profile->IsOffTheRecord()); 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch extensions::ActivityLog* activity_log = 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch extensions::ActivityLog::GetInstance(profile); 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch activity_log->LogAction(action); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} // namespace 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)ChromeRenderMessageFilter::ChromeRenderMessageFilter( 828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int render_process_id, 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile, 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) net::URLRequestContextGetter* request_context) 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : BrowserMessageFilter( 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kFilteredMessageClasses, arraysize(kFilteredMessageClasses)), 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) render_process_id_(render_process_id), 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_(profile), 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) off_the_record_(profile_->IsOffTheRecord()), 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) predictor_(profile_->GetNetworkPredictor()), 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) request_context_(request_context), 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_info_map_( 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->info_map()), 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cookie_settings_(CookieSettings::Factory::GetForProfile(profile)), 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_(this) { 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ChromeRenderMessageFilter::~ChromeRenderMessageFilter() { 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message, 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool* message_was_ok) { 1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool handled = true; 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP_EX(ChromeRenderMessageFilter, message, *message_was_ok) 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DnsPrefetch, OnDnsPrefetch) 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_Preconnect, OnPreconnect) 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ResourceTypeStats, 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnResourceTypeStats) 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_UpdatedCacheStats, 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) OnUpdatedCacheStats) 1116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FPS, OnFPS) 1126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_V8HeapStats, OnV8HeapStats) 1138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToExtension, 1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) OnOpenChannelToExtension) 1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToTab, OnOpenChannelToTab) 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToNativeApp, 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnOpenChannelToNativeApp) 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ExtensionHostMsg_GetMessageBundle, 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnGetExtensionMessageBundle) 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_CloseChannel, OnExtensionCloseChannel) 1218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_RequestForIOThread, 1226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OnExtensionRequestForIOThread) 1236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddAPIActionToActivityLog, 1246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OnAddAPIActionToExtensionActivityLog); 1256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddDOMActionToActivityLog, 1266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OnAddDOMActionToExtensionActivityLog); 1276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddEventToActivityLog, 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnAddEventToExtensionActivityLog); 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDatabase, OnAllowDatabase) 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDOMStorage, OnAllowDOMStorage) 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowFileSystem, OnAllowFileSystem) 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowIndexedDB, OnAllowIndexedDB) 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardRead, 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnCanTriggerClipboardRead) 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardWrite, 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnCanTriggerClipboardWrite) 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewHostMsg_IsCrashReportingEnabled, 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnIsCrashReportingEnabled) 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_END_MESSAGE_MAP() 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return handled; 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ChromeRenderMessageFilter::OverrideThreadForMessage( 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const IPC::Message& message, BrowserThread::ID* thread) { 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (message.type()) { 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case ChromeViewHostMsg_ResourceTypeStats::ID: 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case ExtensionHostMsg_CloseChannel::ID: 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case ChromeViewHostMsg_UpdatedCacheStats::ID: 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) *thread = BrowserThread::UI; 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) break; 1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) default: 1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) break; 1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)net::HostResolver* ChromeRenderMessageFilter::GetHostResolver() { 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return request_context_->GetURLRequestContext()->host_resolver(); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnDnsPrefetch( 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::string>& hostnames) { 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (predictor_) 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) predictor_->DnsPrefetchList(hostnames); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnPreconnect(const GURL& url) { 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (predictor_) 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) predictor_->PreconnectUrl( 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url, GURL(), chrome_browser_net::UrlInfo::MOUSE_OVER_MOTIVATED, 1); 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnResourceTypeStats( 1758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const WebCache::ResourceTypeStats& stats) { 1768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) HISTOGRAM_COUNTS("WebCoreCache.ImagesSizeKB", 1778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static_cast<int>(stats.images.size / 1024)); 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HISTOGRAM_COUNTS("WebCoreCache.CSSStylesheetsSizeKB", 179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch static_cast<int>(stats.cssStyleSheets.size / 1024)); 1808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) HISTOGRAM_COUNTS("WebCoreCache.ScriptsSizeKB", 1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<int>(stats.scripts.size / 1024)); 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) HISTOGRAM_COUNTS("WebCoreCache.XSLStylesheetsSizeKB", 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<int>(stats.xslStyleSheets.size / 1024)); 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) HISTOGRAM_COUNTS("WebCoreCache.FontsSizeKB", 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static_cast<int>(stats.fonts.size / 1024)); 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(ENABLE_TASK_MANAGER) 1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TaskManager::GetInstance()->model()->NotifyResourceTypeStats(peer_pid(), 1901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) stats); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(ENABLE_TASK_MANAGER) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ChromeRenderMessageFilter::OnUpdatedCacheStats( 1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const WebCache::UsageStats& stats) { 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebCacheManager::GetInstance()->ObserveStats(render_process_id_, stats); 1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ChromeRenderMessageFilter::OnFPS(int routing_id, float fps) { 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::PostTask( 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind( 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &ChromeRenderMessageFilter::OnFPS, this, 205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) routing_id, fps)); 206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ProcessId renderer_id = peer_pid(); 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_TASK_MANAGER) 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TaskManager::GetInstance()->model()->NotifyFPS( 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) renderer_id, routing_id, fps); 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(ENABLE_TASK_MANAGER) 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FPSDetails details(routing_id, fps); 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::NotificationService::current()->Notify( 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::NOTIFICATION_RENDERER_FPS_COMPUTED, 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::Source<const base::ProcessId>(&renderer_id), 2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::Details<const FPSDetails>(&details)); 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void ChromeRenderMessageFilter::OnV8HeapStats(int v8_memory_allocated, 2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int v8_memory_used) { 2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BrowserThread::PostTask( 2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&ChromeRenderMessageFilter::OnV8HeapStats, this, 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v8_memory_allocated, v8_memory_used)); 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ProcessId renderer_id = peer_pid(); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_TASK_MANAGER) 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TaskManager::GetInstance()->model()->NotifyV8HeapStats( 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) renderer_id, 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<size_t>(v8_memory_allocated), 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<size_t>(v8_memory_used)); 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(ENABLE_TASK_MANAGER) 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) V8HeapStatsDetails details(v8_memory_allocated, v8_memory_used); 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::NotificationService::current()->Notify( 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::NOTIFICATION_RENDERER_V8_HEAP_STATS_COMPUTED, 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::Source<const base::ProcessId>(&renderer_id), 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::Details<const V8HeapStatsDetails>(&details)); 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnOpenChannelToExtension( 250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int routing_id, 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ExtensionMsg_ExternalConnectionInfo& info, 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& channel_name, 253a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool include_tls_channel_id, 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int* port_id) { 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int port2_id; 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::MessageService::AllocatePortIdPair(port_id, &port2_id); 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::PostTask( 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ChromeRenderMessageFilter::OpenChannelToExtensionOnUIThread, 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this, render_process_id_, routing_id, port2_id, info, 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) channel_name, include_tls_channel_id)); 263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OpenChannelToExtensionOnUIThread( 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int source_process_id, int source_routing_id, 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int receiver_port_id, 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ExtensionMsg_ExternalConnectionInfo& info, 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& channel_name, 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool include_tls_channel_id) { 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::MessageService::Get(profile_)->OpenChannelToExtension( 2736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) source_process_id, source_routing_id, receiver_port_id, 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) info.source_id, info.target_id, info.source_url, channel_name, 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) include_tls_channel_id); 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnOpenChannelToNativeApp( 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int routing_id, 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& source_extension_id, 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& native_app_name, 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int* port_id) { 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int port2_id; 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::MessageService::AllocatePortIdPair(port_id, &port2_id); 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BrowserThread::PostTask( 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ChromeRenderMessageFilter::OpenChannelToNativeAppOnUIThread, 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this, routing_id, port2_id, source_extension_id, 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) native_app_name)); 2916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 29203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ChromeRenderMessageFilter::OpenChannelToNativeAppOnUIThread( 29403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int source_routing_id, 2956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int receiver_port_id, 2966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& source_extension_id, 2976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& native_app_name) { 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::MessageService::Get(profile_)->OpenChannelToNativeApp( 300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_process_id_, source_routing_id, receiver_port_id, 301a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) source_extension_id, native_app_name); 302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 303a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 304a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeRenderMessageFilter::OnOpenChannelToTab( 305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int routing_id, int tab_id, const std::string& extension_id, 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& channel_name, int* port_id) { 307a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int port2_id; 3086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extensions::MessageService::AllocatePortIdPair(port_id, &port2_id); 309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 310a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) BrowserThread::PostTask( 311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind(&ChromeRenderMessageFilter::OpenChannelToTabOnUIThread, this, 313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_process_id_, routing_id, port2_id, tab_id, extension_id, 314a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) channel_name)); 315a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ChromeRenderMessageFilter::OpenChannelToTabOnUIThread( 318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int source_process_id, int source_routing_id, 319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int receiver_port_id, 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int tab_id, 321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& extension_id, 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& channel_name) { 323a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extensions::MessageService::Get(profile_)->OpenChannelToTab( 3256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) source_process_id, source_routing_id, receiver_port_id, 32603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) tab_id, extension_id, channel_name); 3276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 3286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ChromeRenderMessageFilter::OnGetExtensionMessageBundle( 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& extension_id, IPC::Message* reply_msg) { 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const extensions::Extension* extension = 3326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_info_map_->extensions().GetByID(extension_id); 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath extension_path; 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string default_locale; 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (extension) { 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_path = extension->path(); 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) default_locale = extensions::LocaleInfo::GetDefaultLocale(extension); 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::PostTask( 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) BrowserThread::FILE, FROM_HERE, 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind( 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &ChromeRenderMessageFilter::OnGetExtensionMessageBundleOnFileThread, 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this, extension_path, extension_id, default_locale, reply_msg)); 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnGetExtensionMessageBundleOnFileThread( 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& extension_path, 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& extension_id, 3506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& default_locale, 35103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) IPC::Message* reply_msg) { 3526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 35303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<extensions::MessageBundle::SubstitutionMap> dictionary_map( 3556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_file_util::LoadMessageBundleSubstitutionMap( 3566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_path, extension_id, default_locale)); 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionHostMsg_GetMessageBundle::WriteReplyParams(reply_msg, 3596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) *dictionary_map); 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Send(reply_msg); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnExtensionCloseChannel( 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int port_id, 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& error_message) { 366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!content::RenderProcessHost::FromID(render_process_id_)) 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; // To guard against crash in browser_tests shutdown. 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::MessageService* message_service = 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::MessageService::Get(profile_); 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (message_service) 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) message_service->CloseChannel(port_id, error_message); 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnExtensionRequestForIOThread( 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int routing_id, 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ExtensionHostMsg_Request_Params& params) { 3786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 37903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ExtensionFunctionDispatcher::DispatchOnIOThread( 3816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_info_map_.get(), profile_, render_process_id_, 3826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), routing_id, params); 38303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 3846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 38503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void ChromeRenderMessageFilter::OnAddAPIActionToExtensionActivityLog( 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& extension_id, 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExtensionHostMsg_APIActionOrEvent_Params& params) { 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<extensions::Action> action = new extensions::Action( 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_id, base::Time::Now(), extensions::Action::ACTION_API_CALL, 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci params.api_call); 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci action->set_args(make_scoped_ptr(params.arguments.DeepCopy())); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!params.extra.empty()) { 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci action->mutable_other()->SetString( 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci activity_log_constants::kActionExtra, params.extra); 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddActionToExtensionActivityLog(profile_, action); 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeRenderMessageFilter::OnAddDOMActionToExtensionActivityLog( 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& extension_id, 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExtensionHostMsg_DOMAction_Params& params) { 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<extensions::Action> action = new extensions::Action( 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_id, base::Time::Now(), extensions::Action::ACTION_DOM_ACCESS, 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci params.api_call); 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci action->set_args(make_scoped_ptr(params.arguments.DeepCopy())); 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci action->set_page_url(params.url); 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci action->set_page_title(base::UTF16ToUTF8(params.url_title)); 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci action->mutable_other()->SetInteger(activity_log_constants::kActionDomVerb, 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci params.call_type); 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddActionToExtensionActivityLog(profile_, action); 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeRenderMessageFilter::OnAddEventToExtensionActivityLog( 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& extension_id, 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExtensionHostMsg_APIActionOrEvent_Params& params) { 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<extensions::Action> action = new extensions::Action( 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_id, base::Time::Now(), extensions::Action::ACTION_API_EVENT, 4186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) params.api_call); 4196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) action->set_args(make_scoped_ptr(params.arguments.DeepCopy())); 4206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (!params.extra.empty()) { 4216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) action->mutable_other()->SetString(activity_log_constants::kActionExtra, 4226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) params.extra); 4236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 4246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AddActionToExtensionActivityLog(profile_, action); 4256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 4266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ChromeRenderMessageFilter::OnAllowDatabase( 4286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int render_frame_id, 4296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& origin_url, 4306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& top_origin_url, 4316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const base::string16& name, 4326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const base::string16& display_name, 4336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool* allowed) { 4346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) *allowed = 4356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 4366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BrowserThread::PostTask( 4376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 4386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed, 4396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) render_process_id_, render_frame_id, origin_url, name, 4406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) display_name, !*allowed)); 4416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 4426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 44303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void ChromeRenderMessageFilter::OnAllowDOMStorage(int render_frame_id, 4446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& origin_url, 4456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& top_origin_url, 4466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool local, 44703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool* allowed) { 4486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) *allowed = 44903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Record access to DOM storage for potential display in UI. 4516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BrowserThread::PostTask( 4526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 4536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::DOMStorageAccessed, 4546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) render_process_id_, render_frame_id, origin_url, local, 4556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) !*allowed)); 4566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 4576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ChromeRenderMessageFilter::OnAllowFileSystem(int render_frame_id, 4596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& origin_url, 4606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& top_origin_url, 4616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool* allowed) { 4626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) *allowed = 4636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 4646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Record access to file system for potential display in UI. 4656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BrowserThread::PostTask( 4666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 4676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::FileSystemAccessed, 4686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) render_process_id_, render_frame_id, origin_url, !*allowed)); 4696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 47003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ChromeRenderMessageFilter::OnAllowIndexedDB(int render_frame_id, 4726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& origin_url, 4736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& top_origin_url, 47403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const base::string16& name, 4756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool* allowed) { 47603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) *allowed = 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 47803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BrowserThread::PostTask( 4796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 4806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Bind(&TabSpecificContentSettings::IndexedDBAccessed, 4816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) render_process_id_, render_frame_id, origin_url, name, 48203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) !*allowed)); 4836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 48403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeRenderMessageFilter::OnCanTriggerClipboardRead( 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& origin, bool* allowed) { 4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *allowed = extension_info_map_->SecurityOriginHasAPIPermission( 4886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) origin, render_process_id_, APIPermission::kClipboardRead); 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnCanTriggerClipboardWrite( 4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& origin, bool* allowed) { 4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Since all extensions could historically write to the clipboard, preserve it 4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // for compatibility. 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *allowed = (origin.SchemeIs(extensions::kExtensionScheme) || 4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_info_map_->SecurityOriginHasAPIPermission( 497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) origin, render_process_id_, APIPermission::kClipboardWrite)); 498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ChromeRenderMessageFilter::OnIsCrashReportingEnabled(bool* enabled) { 5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *enabled = MetricsServiceHelper::IsCrashReportingEnabled(); 5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)