summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authornoelutz@google.com <noelutz@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-09 23:39:51 +0000
committernoelutz@google.com <noelutz@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-09 23:39:51 +0000
commita7a5e99010728cca53432ef392a44ce392c73353 (patch)
tree62250e23c35ab69bbc6a896ec33bf441470ee922 /chrome/browser/renderer_host
parent0f2a30dbc1bf1d99adc0a67008e85550bff4fa9d (diff)
downloadchromium_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.cc39
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.h13
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);
};