diff options
author | noelutz@google.com <noelutz@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-09 23:39:51 +0000 |
---|---|---|
committer | noelutz@google.com <noelutz@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-09 23:39:51 +0000 |
commit | a7a5e99010728cca53432ef392a44ce392c73353 (patch) | |
tree | 62250e23c35ab69bbc6a896ec33bf441470ee922 /chrome/browser/renderer_host | |
parent | 0f2a30dbc1bf1d99adc0a67008e85550bff4fa9d (diff) | |
download | chromium_src-a7a5e99010728cca53432ef392a44ce392c73353.zip chromium_src-a7a5e99010728cca53432ef392a44ce392c73353.tar.gz chromium_src-a7a5e99010728cca53432ef392a44ce392c73353.tar.bz2 |
Send phishing model from the browser to the renderer.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/5206006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@68791 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.cc | 39 | ||||
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.h | 13 |
2 files changed, 50 insertions, 2 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc index 8b8889d9..5af2e6f 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.cc +++ b/chrome/browser/renderer_host/browser_render_process_host.cc @@ -49,6 +49,7 @@ #include "chrome/browser/renderer_host/render_widget_host.h" #include "chrome/browser/renderer_host/resource_message_filter.h" #include "chrome/browser/renderer_host/web_cache_manager.h" +#include "chrome/browser/safe_browsing/client_side_detection_service.h" #include "chrome/browser/spellcheck_host.h" #include "chrome/browser/metrics/user_metrics.h" #include "chrome/browser/visitedlink/visitedlink_master.h" @@ -215,7 +216,8 @@ BrowserRenderProcessHost::BrowserRenderProcessHost(Profile* profile) base::TimeDelta::FromSeconds(5), this, &BrowserRenderProcessHost::ClearTransportDIBCache)), accessibility_enabled_(false), - extension_process_(false) { + extension_process_(false), + callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { widget_helper_ = new RenderWidgetHelper(); registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED, @@ -626,7 +628,6 @@ void BrowserRenderProcessHost::PropagateBrowserCommandLineToRenderer( switches::kDisableFileSystem, switches::kPpapiOutOfProcess, switches::kEnablePrintPreview, - switches::kEnableClientSidePhishingDetection, switches::kEnableCrxlessWebApps }; renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames, @@ -637,6 +638,12 @@ void BrowserRenderProcessHost::PropagateBrowserCommandLineToRenderer( !browser_cmd.HasSwitch(switches::kDisableDatabases)) { renderer_cmd->AppendSwitch(switches::kDisableDatabases); } + + // Only enable client-side phishing detection in the renderer if it is enabled + // in the browser process. + if (g_browser_process->safe_browsing_detection_service()) { + renderer_cmd->AppendSwitch(switches::kEnableClientSidePhishingDetection); + } } base::ProcessHandle BrowserRenderProcessHost::GetHandle() { @@ -1087,6 +1094,8 @@ void BrowserRenderProcessHost::OnProcessLaunched() { if (profile()->GetSpellCheckHost()) InitSpellChecker(); + InitClientSidePhishingDetection(); + if (max_page_id_ != -1) Send(new ViewMsg_SetNextPageID(max_page_id_ + 1)); @@ -1178,3 +1187,29 @@ void BrowserRenderProcessHost::InitSpellChecker() { void BrowserRenderProcessHost::EnableAutoSpellCorrect(bool enable) { Send(new ViewMsg_SpellChecker_EnableAutoSpellCorrect(enable)); } + +void BrowserRenderProcessHost::InitClientSidePhishingDetection() { + if (g_browser_process->safe_browsing_detection_service()) { + // The BrowserRenderProcessHost object might get deleted before the + // safe browsing client-side detection service class is done with opening + // the model file. To avoid crashing we use the callback factory which will + // cancel the callback if |this| is destroyed. + g_browser_process->safe_browsing_detection_service()->GetModelFile( + callback_factory_.NewCallback( + &BrowserRenderProcessHost::OpenPhishingModelDone)); + } +} + +void BrowserRenderProcessHost::OpenPhishingModelDone( + base::PlatformFile model_file) { + if (model_file != base::kInvalidPlatformFileValue) { + IPC::PlatformFileForTransit file; +#if defined(OS_POSIX) + file = base::FileDescriptor(model_file, false); +#elif defined(OS_WIN) + ::DuplicateHandle(::GetCurrentProcess(), model_file, GetHandle(), &file, 0, + false, DUPLICATE_SAME_ACCESS); +#endif + Send(new ViewMsg_SetPhishingModel(file)); + } +} diff --git a/chrome/browser/renderer_host/browser_render_process_host.h b/chrome/browser/renderer_host/browser_render_process_host.h index 0b3a78a..469fd12 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.h +++ b/chrome/browser/renderer_host/browser_render_process_host.h @@ -13,7 +13,9 @@ #include <string> #include "app/surface/transport_dib.h" +#include "base/platform_file.h" #include "base/process.h" +#include "base/scoped_callback_factory.h" #include "base/scoped_ptr.h" #include "base/timer.h" #include "chrome/browser/child_process_launcher.h" @@ -170,6 +172,15 @@ class BrowserRenderProcessHost : public RenderProcessHost, // Tell the renderer that auto spell correction has been enabled/disabled. void EnableAutoSpellCorrect(bool enable); + // Initializes client-side phishing detection. Starts reading the phishing + // model from the client-side detection service class. Once the model is read + // OpenPhishingModelDone() is invoked. + void InitClientSidePhishingDetection(); + + // Called once the client-side detection service class is done with opening + // the model file. + void OpenPhishingModelDone(base::PlatformFile model_file); + NotificationRegistrar registrar_; // The count of currently visible widgets. Since the host can be a container @@ -220,6 +231,8 @@ class BrowserRenderProcessHost : public RenderProcessHost, // because the queued messages may have dependencies on the init messages. std::queue<IPC::Message*> queued_messages_; + base::ScopedCallbackFactory<BrowserRenderProcessHost> callback_factory_; + DISALLOW_COPY_AND_ASSIGN(BrowserRenderProcessHost); }; |