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)#include "chrome/browser/safe_browsing/safe_browsing_tab_observer.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/client_side_detection_host.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DEFINE_WEB_CONTENTS_USER_DATA_KEY(safe_browsing::SafeBrowsingTabObserver);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace safe_browsing {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(FULL_SAFE_BROWSING)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Provide a dummy implementation so that scoped_ptr<ClientSideDetectionHost>
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// has a concrete destructor to call. This is necessary because it is used
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as a member of SafeBrowsingTabObserver, even if it only ever contains NULL.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ClientSideDetectionHost { };
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SafeBrowsingTabObserver::SafeBrowsingTabObserver(
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::WebContents* web_contents) : web_contents_(web_contents) {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile =
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::FromBrowserContext(web_contents->GetBrowserContext());
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = profile->GetPrefs();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (prefs) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pref_change_registrar_.Init(prefs);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    pref_change_registrar_.Add(
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        prefs::kSafeBrowsingEnabled,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        base::Bind(&SafeBrowsingTabObserver::UpdateSafebrowsingDetectionHost,
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   base::Unretained(this)));
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (prefs->GetBoolean(prefs::kSafeBrowsingEnabled) &&
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        g_browser_process->safe_browsing_detection_service()) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      safebrowsing_detection_host_.reset(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ClientSideDetectionHost::Create(web_contents));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SafeBrowsingTabObserver::~SafeBrowsingTabObserver() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Internal helpers
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SafeBrowsingTabObserver::UpdateSafebrowsingDetectionHost() {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile =
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      Profile::FromBrowserContext(web_contents_->GetBrowserContext());
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = profile->GetPrefs();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool safe_browsing = prefs->GetBoolean(prefs::kSafeBrowsingEnabled);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (safe_browsing &&
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser_process->safe_browsing_detection_service()) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!safebrowsing_detection_host_.get()) {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      safebrowsing_detection_host_.reset(
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ClientSideDetectionHost::Create(web_contents_));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    safebrowsing_detection_host_.reset();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RenderViewHost* rvh = web_contents_->GetRenderViewHost();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rvh->Send(new ChromeViewMsg_SetClientSidePhishingDetection(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rvh->GetRoutingID(), safe_browsing));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace safe_browsing
84