15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/callback.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sequenced_task_runner_helpers.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCache.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieSettings; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Profile; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace chrome_browser_net { 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Predictor; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace extensions { 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class InfoMap; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class filters out incoming Chrome-specific IPC messages for the renderer 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// process on the IPC thread. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeRenderMessageFilter : public content::BrowserMessageFilter { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ChromeRenderMessageFilter(int render_process_id, Profile* profile); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class V8HeapStatsDetails { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) V8HeapStatsDetails(size_t v8_memory_allocated, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t v8_memory_used) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : v8_memory_allocated_(v8_memory_allocated), 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v8_memory_used_(v8_memory_used) {} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t v8_memory_allocated() const { return v8_memory_allocated_; } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t v8_memory_used() const { return v8_memory_used_; } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t v8_memory_allocated_; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t v8_memory_used_; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::BrowserMessageFilter methods: 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OverrideThreadForMessage( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::ID* thread) OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class content::BrowserThread; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::DeleteHelper<ChromeRenderMessageFilter>; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ChromeRenderMessageFilter(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDnsPrefetch(const std::vector<std::string>& hostnames); 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnPreconnect(const GURL& url); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnResourceTypeStats(const blink::WebCache::ResourceTypeStats& stats); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnUpdatedCacheStats(const blink::WebCache::UsageStats& stats); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnV8HeapStats(int v8_memory_allocated, int v8_memory_used); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnAllowDatabase(int render_frame_id, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin_url, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& top_origin_url, 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_name, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* allowed); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnAllowDOMStorage(int render_frame_id, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin_url, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& top_origin_url, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool local, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* allowed); 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnRequestFileSystemAccessSync(int render_frame_id, 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& origin_url, 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& top_origin_url, 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC::Message* message); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static void FileSystemAccessedSyncOnUIThread( 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_process_id, 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_frame_id, 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool blocked_by_policy, 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IPC::Message* reply_msg); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnRequestFileSystemAccessAsync(int render_frame_id, 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int request_id, 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& origin_url, 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& top_origin_url); 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnRequestFileSystemAccessSyncResponse(IPC::Message* reply_msg, 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allowed); 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnRequestFileSystemAccessAsyncResponse(int render_frame_id, 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int request_id, 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allowed); 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnRequestFileSystemAccess(int render_frame_id, 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& origin_url, 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& top_origin_url, 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback); 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static void FileSystemAccessedOnUIThread(int render_process_id, 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_frame_id, 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allowed, 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback); 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static void FileSystemAccessedResponse(int render_process_id, 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int render_frame_id, 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Callback<void(bool)> callback, 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool allowed); 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnAllowIndexedDB(int render_frame_id, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin_url, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& top_origin_url, 116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* allowed); 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(ENABLE_PLUGINS) 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnIsCrashReportingEnabled(bool* enabled); 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const int render_process_id_; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The Profile associated with our renderer process. This should only be 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // accessed on the UI thread! 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The Predictor for the associated Profile. It is stored so that it can be 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // used on the IO thread. 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome_browser_net::Predictor* predictor_; 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to look up permissions at database creation time. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieSettings> cookie_settings_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ChromeRenderMessageFilter); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_RENDERER_HOST_CHROME_RENDER_MESSAGE_FILTER_H_ 138