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.
4
5#ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_TAB_OBSERVER_H_
6#define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_TAB_OBSERVER_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/prefs/pref_change_registrar.h"
10#include "content/public/browser/web_contents_user_data.h"
11
12namespace content {
13class WebContents;
14}
15
16namespace safe_browsing {
17
18class ClientSideDetectionHost;
19
20// Per-tab class to handle safe-browsing functionality.
21class SafeBrowsingTabObserver
22    : public content::WebContentsUserData<SafeBrowsingTabObserver> {
23 public:
24  virtual ~SafeBrowsingTabObserver();
25
26  ClientSideDetectionHost* detection_host() {
27    return safebrowsing_detection_host_.get();
28  }
29
30 private:
31  explicit SafeBrowsingTabObserver(content::WebContents* web_contents);
32  friend class content::WebContentsUserData<SafeBrowsingTabObserver>;
33
34  // Internal helpers ----------------------------------------------------------
35
36  // Create or destroy SafebrowsingDetectionHost as needed if the user's
37  // safe browsing preference has changed.
38  void UpdateSafebrowsingDetectionHost();
39
40  // Handles IPCs.
41  scoped_ptr<ClientSideDetectionHost> safebrowsing_detection_host_;
42
43  // Our owning WebContents.
44  content::WebContents* web_contents_;
45
46  PrefChangeRegistrar pref_change_registrar_;
47
48  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingTabObserver);
49};
50
51}  // namespace safe_browsing
52
53#endif  // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_TAB_OBSERVER_H_
54