| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/managed_mode/managed_mode_resource_throttle.h" | 5 #include "chrome/browser/managed_mode/managed_mode_resource_throttle.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/location.h" |
| 8 #include "chrome/browser/managed_mode/managed_mode.h" | 9 #include "chrome/browser/managed_mode/managed_mode.h" |
| 9 #include "chrome/browser/managed_mode/managed_mode_interstitial.h" | 10 #include "chrome/browser/managed_mode/managed_mode_navigation_observer.h" |
| 10 #include "chrome/browser/managed_mode/managed_mode_url_filter.h" | 11 #include "chrome/browser/managed_mode/managed_mode_url_filter.h" |
| 12 #include "content/public/browser/browser_thread.h" |
| 11 #include "content/public/browser/resource_controller.h" | 13 #include "content/public/browser/resource_controller.h" |
| 12 #include "net/url_request/url_request.h" | 14 #include "net/url_request/url_request.h" |
| 13 | 15 |
| 16 using content::BrowserThread; |
| 17 |
| 14 namespace { | 18 namespace { |
| 15 | 19 |
| 16 // Uniquely identifies a tab, used to set a temporary exception on it. | 20 // Uniquely identifies a tab, used to set a temporary exception on it. |
| 17 struct WebContentsId { | 21 struct WebContentsId { |
| 18 WebContentsId(int render_process_host_id, int render_view_id) | 22 WebContentsId(int render_process_host_id, int render_view_id) |
| 19 : render_process_host_id(render_process_host_id), | 23 : render_process_host_id(render_process_host_id), |
| 20 render_view_id(render_view_id) {} | 24 render_view_id(render_view_id) {} |
| 21 | 25 |
| 22 bool operator<(const WebContentsId& key) const { | 26 bool operator<(const WebContentsId& key) const { |
| 23 if (render_process_host_id != key.render_process_host_id) | 27 if (render_process_host_id != key.render_process_host_id) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 37 }; | 41 }; |
| 38 | 42 |
| 39 // This map contains <render_process_host_id_, render_view_id> pairs mapped | 43 // This map contains <render_process_host_id_, render_view_id> pairs mapped |
| 40 // to |TemporaryExceptionData| which identifies individual tabs. If a | 44 // to |TemporaryExceptionData| which identifies individual tabs. If a |
| 41 // |TemporaryExceptionData| is present for a specific pair then the user | 45 // |TemporaryExceptionData| is present for a specific pair then the user |
| 42 // clicked preview, is navigating around and has not clicked one of the options | 46 // clicked preview, is navigating around and has not clicked one of the options |
| 43 // on the infobar. | 47 // on the infobar. |
| 44 typedef std::map<WebContentsId, TemporaryExceptionData> PreviewMap; | 48 typedef std::map<WebContentsId, TemporaryExceptionData> PreviewMap; |
| 45 base::LazyInstance<PreviewMap> g_in_preview_mode = LAZY_INSTANCE_INITIALIZER; | 49 base::LazyInstance<PreviewMap> g_in_preview_mode = LAZY_INSTANCE_INITIALIZER; |
| 46 | 50 |
| 47 } | 51 } // namespace |
| 48 | 52 |
| 49 ManagedModeResourceThrottle::ManagedModeResourceThrottle( | 53 ManagedModeResourceThrottle::ManagedModeResourceThrottle( |
| 50 const net::URLRequest* request, | 54 const net::URLRequest* request, |
| 51 int render_process_host_id, | 55 int render_process_host_id, |
| 52 int render_view_id, | 56 int render_view_id, |
| 53 bool is_main_frame, | 57 bool is_main_frame, |
| 54 const ManagedModeURLFilter* url_filter) | 58 const ManagedModeURLFilter* url_filter) |
| 55 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), | 59 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), |
| 56 request_(request), | 60 request_(request), |
| 57 render_process_host_id_(render_process_host_id), | 61 render_process_host_id_(render_process_host_id), |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 WebContentsId web_contents_id(render_process_host_id_, render_view_id_); | 124 WebContentsId web_contents_id(render_process_host_id_, render_view_id_); |
| 121 PreviewMap::iterator it = preview_map->find(web_contents_id); | 125 PreviewMap::iterator it = preview_map->find(web_contents_id); |
| 122 if (it != preview_map->end() && | 126 if (it != preview_map->end() && |
| 123 (!it->second.new_navigation || url.host() == it->second.host)) { | 127 (!it->second.new_navigation || url.host() == it->second.host)) { |
| 124 temporarily_allowed_ = true; | 128 temporarily_allowed_ = true; |
| 125 RemoveTemporaryException(render_process_host_id_, render_view_id_); | 129 RemoveTemporaryException(render_process_host_id_, render_view_id_); |
| 126 return; | 130 return; |
| 127 } | 131 } |
| 128 | 132 |
| 129 *defer = true; | 133 *defer = true; |
| 130 ManagedModeInterstitial::ShowInterstitial( | 134 |
| 131 render_process_host_id_, render_view_id_, url, | 135 BrowserThread::PostTask( |
| 132 base::Bind(&ManagedModeResourceThrottle::OnInterstitialResult, | 136 BrowserThread::UI, FROM_HERE, |
| 133 weak_ptr_factory_.GetWeakPtr())); | 137 base::Bind(&ManagedModeNavigationObserver::DidBlockRequest, |
| 138 render_process_host_id_, render_view_id_, url, |
| 139 base::Bind(&ManagedModeResourceThrottle::OnInterstitialResult, |
| 140 weak_ptr_factory_.GetWeakPtr()))); |
| 134 } | 141 } |
| 135 | 142 |
| 136 void ManagedModeResourceThrottle::WillStartRequest(bool* defer) { | 143 void ManagedModeResourceThrottle::WillStartRequest(bool* defer) { |
| 137 ShowInterstitialIfNeeded(false, request_->url(), defer); | 144 ShowInterstitialIfNeeded(false, request_->url(), defer); |
| 138 } | 145 } |
| 139 | 146 |
| 140 void ManagedModeResourceThrottle::WillRedirectRequest(const GURL& new_url, | 147 void ManagedModeResourceThrottle::WillRedirectRequest(const GURL& new_url, |
| 141 bool* defer) { | 148 bool* defer) { |
| 142 ShowInterstitialIfNeeded(true, new_url, defer); | 149 ShowInterstitialIfNeeded(true, new_url, defer); |
| 143 } | 150 } |
| 144 | 151 |
| 145 void ManagedModeResourceThrottle::OnInterstitialResult(bool continue_request) { | 152 void ManagedModeResourceThrottle::OnInterstitialResult(bool continue_request) { |
| 146 if (continue_request) { | 153 if (continue_request) { |
| 147 temporarily_allowed_ = true; | 154 temporarily_allowed_ = true; |
| 148 controller()->Resume(); | 155 controller()->Resume(); |
| 149 } else { | 156 } else { |
| 150 controller()->Cancel(); | 157 controller()->Cancel(); |
| 151 } | 158 } |
| 152 } | 159 } |
| OLD | NEW |