chrome_render_message_filter.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Use of this source code is governed by a BSD-style license that can be 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// found in the LICENSE file. 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/renderer_host/chrome_render_message_filter.h" 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <string> 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/bind.h" 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/bind_helpers.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/metrics/histogram.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/strings/utf_string_conversions.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/browser_process.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/chrome_notification_types.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/content_settings/cookie_settings.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/content_settings/tab_specific_content_settings.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/extensions/activity_log/activity_action_constants.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/extensions/activity_log/activity_actions.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/extensions/activity_log/activity_log.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/extensions/api/messaging/message_service.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/metrics/metrics_service.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/net/chrome_url_request_context.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/net/predictor.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/profiles/profile_manager.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/task_manager/task_manager.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/common/extensions/api/i18n/default_locale_handler.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/common/render_messages.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/public/browser/notification_service.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/public/browser/render_process_host.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "extensions/browser/extension_system.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "extensions/common/constants.h" 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "extensions/common/extension_messages.h" 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "extensions/common/file_util.h" 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "extensions/common/message_bundle.h" 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(USE_TCMALLOC) 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/browser_about_handler.h" 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgusing content::BrowserThread; 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgusing extensions::APIPermission; 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgusing blink::WebCache; 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnamespace { 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst uint32 kFilteredMessageClasses[] = { 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChromeMsgStart, 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ExtensionMsgStart, 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Logs an action to the extension activity log for the specified profile. Can 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// be called from any thread. 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid AddActionToExtensionActivityLog( 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Profile* profile, 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_refptr<extensions::Action> action) { 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(ENABLE_EXTENSIONS) 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // The ActivityLog can only be accessed from the main (UI) thread. If we're 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // running on the wrong thread, re-dispatch from the main thread. 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&AddActionToExtensionActivityLog, profile, action)); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!g_browser_process->profile_manager()->IsValidProfile(profile)) 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // If the action included a URL, check whether it is for an incognito 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // profile. The check is performed here so that it can safely be done from 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // the UI thread. 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (action->page_url().is_valid() || !action->page_title().empty()) 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->set_page_incognito(profile->IsOffTheRecord()); 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::ActivityLog* activity_log = 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::ActivityLog::GetInstance(profile); 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org activity_log->LogAction(action); 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} // namespace 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgChromeRenderMessageFilter::ChromeRenderMessageFilter( 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int render_process_id, 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Profile* profile, 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org net::URLRequestContextGetter* request_context) 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : BrowserMessageFilter(kFilteredMessageClasses, 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org arraysize(kFilteredMessageClasses)), 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org render_process_id_(render_process_id), 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org profile_(profile), 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org off_the_record_(profile_->IsOffTheRecord()), 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org predictor_(profile_->GetNetworkPredictor()), 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org request_context_(request_context), 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_info_map_( 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::ExtensionSystem::Get(profile)->info_map()), 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cookie_settings_(CookieSettings::Factory::GetForProfile(profile)) {} 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgChromeRenderMessageFilter::~ChromeRenderMessageFilter() { 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgbool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message, 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool* message_was_ok) { 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool handled = true; 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_BEGIN_MESSAGE_MAP_EX(ChromeRenderMessageFilter, message, *message_was_ok) 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DnsPrefetch, OnDnsPrefetch) 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_Preconnect, OnPreconnect) 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ResourceTypeStats, 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnResourceTypeStats) 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_UpdatedCacheStats, 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnUpdatedCacheStats) 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FPS, OnFPS) 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_V8HeapStats, OnV8HeapStats) 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToExtension, 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnOpenChannelToExtension) 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToTab, OnOpenChannelToTab) 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToNativeApp, 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnOpenChannelToNativeApp) 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER_DELAY_REPLY(ExtensionHostMsg_GetMessageBundle, 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnGetExtensionMessageBundle) 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ExtensionHostMsg_CloseChannel, OnExtensionCloseChannel) 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddAPIActionToActivityLog, 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnAddAPIActionToExtensionActivityLog); 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddDOMActionToActivityLog, 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnAddDOMActionToExtensionActivityLog); 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddEventToActivityLog, 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnAddEventToExtensionActivityLog); 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDatabase, OnAllowDatabase) 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowDOMStorage, OnAllowDOMStorage) 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowFileSystem, OnAllowFileSystem) 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AllowIndexedDB, OnAllowIndexedDB) 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardRead, 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnCanTriggerClipboardRead) 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CanTriggerClipboardWrite, 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnCanTriggerClipboardWrite) 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_HANDLER(ChromeViewHostMsg_IsCrashReportingEnabled, 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org OnIsCrashReportingEnabled) 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_MESSAGE_UNHANDLED(handled = false) 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC_END_MESSAGE_MAP() 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return handled; 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OverrideThreadForMessage( 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const IPC::Message& message, BrowserThread::ID* thread) { 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (message.type()) { 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case ChromeViewHostMsg_ResourceTypeStats::ID: 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case ExtensionHostMsg_CloseChannel::ID: 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case ChromeViewHostMsg_UpdatedCacheStats::ID: 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *thread = BrowserThread::UI; 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnet::HostResolver* ChromeRenderMessageFilter::GetHostResolver() { 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return request_context_->GetURLRequestContext()->host_resolver(); 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnDnsPrefetch( 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::vector<std::string>& hostnames) { 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (predictor_) 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org predictor_->DnsPrefetchList(hostnames); 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnPreconnect(const GURL& url) { 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (predictor_) 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org predictor_->PreconnectUrl( 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org url, GURL(), chrome_browser_net::UrlInfo::MOUSE_OVER_MOTIVATED, 1); 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnResourceTypeStats( 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const WebCache::ResourceTypeStats& stats) { 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HISTOGRAM_COUNTS("WebCoreCache.ImagesSizeKB", 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static_cast<int>(stats.images.size / 1024)); 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HISTOGRAM_COUNTS("WebCoreCache.CSSStylesheetsSizeKB", 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static_cast<int>(stats.cssStyleSheets.size / 1024)); 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HISTOGRAM_COUNTS("WebCoreCache.ScriptsSizeKB", 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static_cast<int>(stats.scripts.size / 1024)); 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HISTOGRAM_COUNTS("WebCoreCache.XSLStylesheetsSizeKB", 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static_cast<int>(stats.xslStyleSheets.size / 1024)); 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HISTOGRAM_COUNTS("WebCoreCache.FontsSizeKB", 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static_cast<int>(stats.fonts.size / 1024)); 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(ENABLE_TASK_MANAGER) 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TaskManager::GetInstance()->model()->NotifyResourceTypeStats(peer_pid(), 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org stats); 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // defined(ENABLE_TASK_MANAGER) 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnUpdatedCacheStats( 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const WebCache::UsageStats& stats) { 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org WebCacheManager::GetInstance()->ObserveStats(render_process_id_, stats); 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnFPS(int routing_id, float fps) { 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind( 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &ChromeRenderMessageFilter::OnFPS, this, 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org routing_id, fps)); 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(ENABLE_TASK_MANAGER) 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TaskManager::GetInstance()->model()->NotifyFPS( 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org peer_pid(), routing_id, fps); 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // defined(ENABLE_TASK_MANAGER) 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnV8HeapStats(int v8_memory_allocated, 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int v8_memory_used) { 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&ChromeRenderMessageFilter::OnV8HeapStats, this, 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org v8_memory_allocated, v8_memory_used)); 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::ProcessId renderer_id = peer_pid(); 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(ENABLE_TASK_MANAGER) 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TaskManager::GetInstance()->model()->NotifyV8HeapStats( 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org renderer_id, 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static_cast<size_t>(v8_memory_allocated), 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static_cast<size_t>(v8_memory_used)); 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // defined(ENABLE_TASK_MANAGER) 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org V8HeapStatsDetails details(v8_memory_allocated, v8_memory_used); 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::NotificationService::current()->Notify( 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org chrome::NOTIFICATION_RENDERER_V8_HEAP_STATS_COMPUTED, 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::Source<const base::ProcessId>(&renderer_id), 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::Details<const V8HeapStatsDetails>(&details)); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnOpenChannelToExtension( 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int routing_id, 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const ExtensionMsg_ExternalConnectionInfo& info, 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& channel_name, 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool include_tls_channel_id, 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int* port_id) { 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int port2_id; 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService::AllocatePortIdPair(port_id, &port2_id); 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&ChromeRenderMessageFilter::OpenChannelToExtensionOnUIThread, 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org this, render_process_id_, routing_id, port2_id, info, 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org channel_name, include_tls_channel_id)); 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OpenChannelToExtensionOnUIThread( 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int source_process_id, int source_routing_id, 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int receiver_port_id, 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const ExtensionMsg_ExternalConnectionInfo& info, 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& channel_name, 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool include_tls_channel_id) { 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService::Get(profile_)->OpenChannelToExtension( 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source_process_id, source_routing_id, receiver_port_id, 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org info.source_id, info.target_id, info.source_url, channel_name, 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org include_tls_channel_id); 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnOpenChannelToNativeApp( 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int routing_id, 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& source_extension_id, 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& native_app_name, 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int* port_id) { 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int port2_id; 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService::AllocatePortIdPair(port_id, &port2_id); 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&ChromeRenderMessageFilter::OpenChannelToNativeAppOnUIThread, 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org this, routing_id, port2_id, source_extension_id, 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org native_app_name)); 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OpenChannelToNativeAppOnUIThread( 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int source_routing_id, 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int receiver_port_id, 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& source_extension_id, 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& native_app_name) { 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService::Get(profile_)->OpenChannelToNativeApp( 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org render_process_id_, source_routing_id, receiver_port_id, 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source_extension_id, native_app_name); 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnOpenChannelToTab( 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int routing_id, int tab_id, const std::string& extension_id, 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& channel_name, int* port_id) { 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int port2_id; 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService::AllocatePortIdPair(port_id, &port2_id); 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&ChromeRenderMessageFilter::OpenChannelToTabOnUIThread, this, 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org render_process_id_, routing_id, port2_id, tab_id, extension_id, 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org channel_name)); 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OpenChannelToTabOnUIThread( 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int source_process_id, int source_routing_id, 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int receiver_port_id, 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int tab_id, 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& extension_id, 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& channel_name) { 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService::Get(profile_)->OpenChannelToTab( 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source_process_id, source_routing_id, receiver_port_id, 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tab_id, extension_id, channel_name); 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnGetExtensionMessageBundle( 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& extension_id, IPC::Message* reply_msg) { 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const extensions::Extension* extension = 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_info_map_->extensions().GetByID(extension_id); 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::FilePath extension_path; 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::string default_locale; 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (extension) { 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_path = extension->path(); 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default_locale = extensions::LocaleInfo::GetDefaultLocale(extension); 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::FILE, FROM_HERE, 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind( 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &ChromeRenderMessageFilter::OnGetExtensionMessageBundleOnFileThread, 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org this, extension_path, extension_id, default_locale, reply_msg)); 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnGetExtensionMessageBundleOnFileThread( 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const base::FilePath& extension_path, 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& extension_id, 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& default_locale, 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IPC::Message* reply_msg) { 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<extensions::MessageBundle::SubstitutionMap> dictionary_map( 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::file_util::LoadMessageBundleSubstitutionMap( 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_path, extension_id, default_locale)); 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ExtensionHostMsg_GetMessageBundle::WriteReplyParams(reply_msg, 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *dictionary_map); 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Send(reply_msg); 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnExtensionCloseChannel( 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int port_id, 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& error_message) { 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!content::RenderProcessHost::FromID(render_process_id_)) 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; // To guard against crash in browser_tests shutdown. 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService* message_service = 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extensions::MessageService::Get(profile_); 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (message_service) 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org message_service->CloseChannel(port_id, error_message); 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnAddAPIActionToExtensionActivityLog( 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& extension_id, 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const ExtensionHostMsg_APIActionOrEvent_Params& params) { 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_refptr<extensions::Action> action = new extensions::Action( 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_id, base::Time::Now(), extensions::Action::ACTION_API_CALL, 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org params.api_call); 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->set_args(make_scoped_ptr(params.arguments.DeepCopy())); 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!params.extra.empty()) { 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->mutable_other()->SetString( 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org activity_log_constants::kActionExtra, params.extra); 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org AddActionToExtensionActivityLog(profile_, action); 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnAddDOMActionToExtensionActivityLog( 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& extension_id, 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const ExtensionHostMsg_DOMAction_Params& params) { 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_refptr<extensions::Action> action = new extensions::Action( 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_id, base::Time::Now(), extensions::Action::ACTION_DOM_ACCESS, 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org params.api_call); 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->set_args(make_scoped_ptr(params.arguments.DeepCopy())); 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->set_page_url(params.url); 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->set_page_title(base::UTF16ToUTF8(params.url_title)); 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->mutable_other()->SetInteger(activity_log_constants::kActionDomVerb, 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org params.call_type); 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org AddActionToExtensionActivityLog(profile_, action); 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnAddEventToExtensionActivityLog( 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string& extension_id, 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const ExtensionHostMsg_APIActionOrEvent_Params& params) { 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_refptr<extensions::Action> action = new extensions::Action( 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_id, base::Time::Now(), extensions::Action::ACTION_API_EVENT, 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org params.api_call); 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->set_args(make_scoped_ptr(params.arguments.DeepCopy())); 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!params.extra.empty()) { 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org action->mutable_other()->SetString(activity_log_constants::kActionExtra, 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org params.extra); 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org AddActionToExtensionActivityLog(profile_, action); 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnAllowDatabase( 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int render_frame_id, 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& origin_url, 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& top_origin_url, 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const base::string16& name, 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const base::string16& display_name, 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool* allowed) { 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *allowed = 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&TabSpecificContentSettings::WebDatabaseAccessed, 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org render_process_id_, render_frame_id, origin_url, name, 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org display_name, !*allowed)); 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnAllowDOMStorage(int render_frame_id, 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& origin_url, 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& top_origin_url, 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool local, 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool* allowed) { 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *allowed = 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Record access to DOM storage for potential display in UI. 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&TabSpecificContentSettings::DOMStorageAccessed, 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org render_process_id_, render_frame_id, origin_url, local, 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !*allowed)); 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnAllowFileSystem(int render_frame_id, 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& origin_url, 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& top_origin_url, 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool* allowed) { 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *allowed = 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Record access to file system for potential display in UI. 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&TabSpecificContentSettings::FileSystemAccessed, 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org render_process_id_, render_frame_id, origin_url, !*allowed)); 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnAllowIndexedDB(int render_frame_id, 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& origin_url, 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& top_origin_url, 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const base::string16& name, 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bool* allowed) { 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *allowed = 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cookie_settings_->IsSettingCookieAllowed(origin_url, top_origin_url); 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::PostTask( 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BrowserThread::UI, FROM_HERE, 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::Bind(&TabSpecificContentSettings::IndexedDBAccessed, 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org render_process_id_, render_frame_id, origin_url, name, 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !*allowed)); 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnCanTriggerClipboardRead( 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& origin, bool* allowed) { 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *allowed = extension_info_map_->SecurityOriginHasAPIPermission( 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org origin, render_process_id_, APIPermission::kClipboardRead); 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnCanTriggerClipboardWrite( 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GURL& origin, bool* allowed) { 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Since all extensions could historically write to the clipboard, preserve it 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // for compatibility. 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *allowed = (origin.SchemeIs(extensions::kExtensionScheme) || 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extension_info_map_->SecurityOriginHasAPIPermission( 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org origin, render_process_id_, APIPermission::kClipboardWrite)); 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ChromeRenderMessageFilter::OnIsCrashReportingEnabled(bool* enabled) { 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *enabled = MetricsServiceHelper::IsCrashReportingEnabled(); 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org