Upstream version 8.37.180.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / supervised_user / supervised_user_navigation_observer.h
1 // Copyright 2014 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_SUPERVISED_USER_SUPERVISED_USER_NAVIGATION_OBSERVER_H_
6 #define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_NAVIGATION_OBSERVER_H_
7
8 #include <set>
9 #include <vector>
10
11 #include "base/memory/scoped_vector.h"
12 #include "base/values.h"
13 #include "chrome/browser/supervised_user/supervised_users.h"
14 #include "content/public/browser/web_contents_observer.h"
15 #include "content/public/browser/web_contents_user_data.h"
16
17 class SupervisedUserService;
18 class SupervisedUserURLFilter;
19
20 namespace content {
21 class NavigationEntry;
22 }
23
24 namespace infobars {
25 class InfoBar;
26 }
27
28 class SupervisedUserNavigationObserver
29     : public content::WebContentsObserver,
30       public content::WebContentsUserData<SupervisedUserNavigationObserver> {
31  public:
32   virtual ~SupervisedUserNavigationObserver();
33
34   // Sets the specific infobar as dismissed.
35   void WarnInfoBarDismissed();
36
37   const std::vector<const content::NavigationEntry*>*
38       blocked_navigations() const {
39     return &blocked_navigations_.get();
40   }
41
42   // Called when a network request to |url| is blocked.
43   static void OnRequestBlocked(int render_process_host_id,
44                                int render_view_id,
45                                const GURL& url,
46                                const base::Callback<void(bool)>& callback);
47
48  private:
49   friend class content::WebContentsUserData<SupervisedUserNavigationObserver>;
50
51   explicit SupervisedUserNavigationObserver(content::WebContents* web_contents);
52
53   // content::WebContentsObserver implementation.
54   virtual void ProvisionalChangeToMainFrameUrl(
55       const GURL& url,
56       content::RenderFrameHost* render_frame_host) OVERRIDE;
57   virtual void DidCommitProvisionalLoadForFrame(
58       int64 frame_id,
59       const base::string16& frame_unique_name,
60       bool is_main_frame,
61       const GURL& url,
62       content::PageTransition transition_type,
63       content::RenderViewHost* render_view_host) OVERRIDE;
64
65   void OnRequestBlockedInternal(const GURL& url);
66
67   // Owned by the profile, so outlives us.
68   SupervisedUserService* supervised_user_service_;
69
70   // Owned by SupervisedUserService.
71   const SupervisedUserURLFilter* url_filter_;
72
73   // Owned by the InfoBarService, which has the same lifetime as this object.
74   infobars::InfoBar* warn_infobar_;
75
76   ScopedVector<const content::NavigationEntry> blocked_navigations_;
77
78   DISALLOW_COPY_AND_ASSIGN(SupervisedUserNavigationObserver);
79 };
80
81 #endif  // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_NAVIGATION_OBSERVER_H_