Update mojo surfaces bindings and mojo/cc/ glue
[chromium-blink-merge.git] / chrome / browser / safe_browsing / safe_browsing_tab_observer.cc
bloba34c06cbcbbcef02f4afbbce7934529669283f55
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/safe_browsing/safe_browsing_tab_observer.h"
7 #include "base/prefs/pref_service.h"
8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/common/pref_names.h"
12 #include "chrome/common/render_messages.h"
13 #include "content/public/browser/notification_details.h"
14 #include "content/public/browser/notification_source.h"
15 #include "content/public/browser/render_view_host.h"
16 #include "content/public/browser/web_contents.h"
18 #if defined(FULL_SAFE_BROWSING)
19 #include "chrome/browser/safe_browsing/client_side_detection_host.h"
20 #endif
22 DEFINE_WEB_CONTENTS_USER_DATA_KEY(safe_browsing::SafeBrowsingTabObserver);
24 namespace safe_browsing {
26 #if !defined(FULL_SAFE_BROWSING)
27 // Provide a dummy implementation so that scoped_ptr<ClientSideDetectionHost>
28 // has a concrete destructor to call. This is necessary because it is used
29 // as a member of SafeBrowsingTabObserver, even if it only ever contains NULL.
30 class ClientSideDetectionHost { };
31 #endif
33 SafeBrowsingTabObserver::SafeBrowsingTabObserver(
34 content::WebContents* web_contents) : web_contents_(web_contents) {
35 #if defined(FULL_SAFE_BROWSING)
36 Profile* profile =
37 Profile::FromBrowserContext(web_contents->GetBrowserContext());
38 PrefService* prefs = profile->GetPrefs();
39 if (prefs) {
40 pref_change_registrar_.Init(prefs);
41 pref_change_registrar_.Add(
42 prefs::kSafeBrowsingEnabled,
43 base::Bind(&SafeBrowsingTabObserver::UpdateSafebrowsingDetectionHost,
44 base::Unretained(this)));
46 if (prefs->GetBoolean(prefs::kSafeBrowsingEnabled) &&
47 g_browser_process->safe_browsing_detection_service()) {
48 safebrowsing_detection_host_.reset(
49 ClientSideDetectionHost::Create(web_contents));
52 #endif
55 SafeBrowsingTabObserver::~SafeBrowsingTabObserver() {
58 ////////////////////////////////////////////////////////////////////////////////
59 // Internal helpers
61 void SafeBrowsingTabObserver::UpdateSafebrowsingDetectionHost() {
62 #if defined(FULL_SAFE_BROWSING)
63 Profile* profile =
64 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
65 PrefService* prefs = profile->GetPrefs();
66 bool safe_browsing = prefs->GetBoolean(prefs::kSafeBrowsingEnabled);
67 if (safe_browsing &&
68 g_browser_process->safe_browsing_detection_service()) {
69 if (!safebrowsing_detection_host_.get()) {
70 safebrowsing_detection_host_.reset(
71 ClientSideDetectionHost::Create(web_contents_));
73 } else {
74 safebrowsing_detection_host_.reset();
77 content::RenderViewHost* rvh = web_contents_->GetRenderViewHost();
78 rvh->Send(new ChromeViewMsg_SetClientSidePhishingDetection(
79 rvh->GetRoutingID(), safe_browsing));
80 #endif
83 // Forwards to detection host is client-side detection is enabled.
84 bool SafeBrowsingTabObserver::DidPageReceiveSafeBrowsingMatch() const {
85 #if defined(FULL_SAFE_BROWSING)
86 return safebrowsing_detection_host_ &&
87 safebrowsing_detection_host_->DidPageReceiveSafeBrowsingMatch();
88 #else
89 return false;
90 #endif
93 } // namespace safe_browsing