OLD | NEW |
| (Empty) |
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 #include "chrome/browser/managed_mode/managed_mode_resource_throttle.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "chrome/browser/managed_mode/managed_mode_interstitial.h" | |
9 #include "chrome/browser/managed_mode/managed_mode_navigation_observer.h" | |
10 #include "chrome/browser/managed_mode/managed_mode_url_filter.h" | |
11 #include "content/public/browser/browser_thread.h" | |
12 #include "content/public/browser/resource_controller.h" | |
13 #include "content/public/browser/resource_request_info.h" | |
14 #include "net/url_request/url_request.h" | |
15 | |
16 using content::BrowserThread; | |
17 | |
18 ManagedModeResourceThrottle::ManagedModeResourceThrottle( | |
19 const net::URLRequest* request, | |
20 bool is_main_frame, | |
21 const ManagedModeURLFilter* url_filter) | |
22 : request_(request), | |
23 is_main_frame_(is_main_frame), | |
24 url_filter_(url_filter), | |
25 weak_ptr_factory_(this) {} | |
26 | |
27 ManagedModeResourceThrottle::~ManagedModeResourceThrottle() {} | |
28 | |
29 void ManagedModeResourceThrottle::ShowInterstitialIfNeeded(bool is_redirect, | |
30 const GURL& url, | |
31 bool* defer) { | |
32 // Only treat main frame requests for now (ignoring subresources). | |
33 if (!is_main_frame_) | |
34 return; | |
35 | |
36 if (url_filter_->GetFilteringBehaviorForURL(url) != | |
37 ManagedModeURLFilter::BLOCK) { | |
38 return; | |
39 } | |
40 | |
41 *defer = true; | |
42 const content::ResourceRequestInfo* info = | |
43 content::ResourceRequestInfo::ForRequest(request_); | |
44 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
45 base::Bind(&ManagedModeNavigationObserver::OnRequestBlocked, | |
46 info->GetChildID(), info->GetRouteID(), url, | |
47 base::Bind(&ManagedModeResourceThrottle::OnInterstitialResult, | |
48 weak_ptr_factory_.GetWeakPtr()))); | |
49 } | |
50 | |
51 void ManagedModeResourceThrottle::WillStartRequest(bool* defer) { | |
52 ShowInterstitialIfNeeded(false, request_->url(), defer); | |
53 } | |
54 | |
55 void ManagedModeResourceThrottle::WillRedirectRequest(const GURL& new_url, | |
56 bool* defer) { | |
57 ShowInterstitialIfNeeded(true, new_url, defer); | |
58 } | |
59 | |
60 const char* ManagedModeResourceThrottle::GetNameForLogging() const { | |
61 return "ManagedModeResourceThrottle"; | |
62 } | |
63 | |
64 void ManagedModeResourceThrottle::OnInterstitialResult(bool continue_request) { | |
65 if (continue_request) | |
66 controller()->Resume(); | |
67 else | |
68 controller()->Cancel(); | |
69 } | |
OLD | NEW |