Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: chrome/browser/managed_mode/managed_mode_resource_throttle.cc

Issue 13533017: Fix managed mode allow/block flow (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rename variable Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/managed_mode/managed_mode_resource_throttle.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "chrome/browser/managed_mode/managed_mode.h" 8 #include "chrome/browser/managed_mode/managed_mode.h"
9 #include "chrome/browser/managed_mode/managed_mode_interstitial.h" 9 #include "chrome/browser/managed_mode/managed_mode_interstitial.h"
10 #include "chrome/browser/managed_mode/managed_mode_url_filter.h" 10 #include "chrome/browser/managed_mode/managed_mode_url_filter.h"
(...skipping 11 matching lines...) Expand all
22 bool operator<(const WebContentsId& key) const { 22 bool operator<(const WebContentsId& key) const {
23 if (render_process_host_id != key.render_process_host_id) 23 if (render_process_host_id != key.render_process_host_id)
24 return render_process_host_id < key.render_process_host_id; 24 return render_process_host_id < key.render_process_host_id;
25 return render_view_id < key.render_view_id; 25 return render_view_id < key.render_view_id;
26 } 26 }
27 27
28 int render_process_host_id; 28 int render_process_host_id;
29 int render_view_id; 29 int render_view_id;
30 }; 30 };
31 31
32 struct TemporaryExceptionData {
33 // Hostname for which the temporary exception was added.
34 std::string host;
35 // Whether the user initiated a new navigation or not.
36 bool new_navigation;
37 };
38
39 // This map contains <render_process_host_id_, render_view_id> pairs mapped 32 // This map contains <render_process_host_id_, render_view_id> pairs mapped
40 // to |TemporaryExceptionData| which identifies individual tabs. If a 33 // to a host string which identifies individual tabs. If a host is present for
41 // |TemporaryExceptionData| is present for a specific pair then the user 34 // a specific pair then the user clicked preview, is navigating around and has
42 // clicked preview, is navigating around and has not clicked one of the options 35 // not clicked one of the options on the infobar.
43 // on the infobar. 36 typedef std::map<WebContentsId, std::string> PreviewMap;
44 typedef std::map<WebContentsId, TemporaryExceptionData> PreviewMap;
45 base::LazyInstance<PreviewMap> g_in_preview_mode = LAZY_INSTANCE_INITIALIZER; 37 base::LazyInstance<PreviewMap> g_in_preview_mode = LAZY_INSTANCE_INITIALIZER;
46 38
47 } 39 }
48 40
49 ManagedModeResourceThrottle::ManagedModeResourceThrottle( 41 ManagedModeResourceThrottle::ManagedModeResourceThrottle(
50 const net::URLRequest* request, 42 const net::URLRequest* request,
51 int render_process_host_id, 43 int render_process_host_id,
52 int render_view_id, 44 int render_view_id,
53 bool is_main_frame, 45 bool is_main_frame,
54 const ManagedModeURLFilter* url_filter) 46 const ManagedModeURLFilter* url_filter)
55 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), 47 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)),
56 request_(request), 48 request_(request),
57 render_process_host_id_(render_process_host_id), 49 render_process_host_id_(render_process_host_id),
58 render_view_id_(render_view_id), 50 render_view_id_(render_view_id),
59 is_main_frame_(is_main_frame), 51 is_main_frame_(is_main_frame),
60 temporarily_allowed_(false), 52 temporarily_allowed_(false),
61 url_filter_(url_filter) {} 53 url_filter_(url_filter) {}
62 54
63 ManagedModeResourceThrottle::~ManagedModeResourceThrottle() {} 55 ManagedModeResourceThrottle::~ManagedModeResourceThrottle() {}
64 56
65 // static 57 // static
66 void ManagedModeResourceThrottle::AddTemporaryException( 58 void ManagedModeResourceThrottle::AddTemporaryException(
67 int render_process_host_id, 59 int render_process_host_id,
68 int render_view_id, 60 int render_view_id,
69 const GURL& url, 61 const GURL& url) {
70 bool new_navigation) {
71 TemporaryExceptionData data;
72 data.host = url.host();
73 data.new_navigation = new_navigation;
74 WebContentsId web_contents_id(render_process_host_id, render_view_id); 62 WebContentsId web_contents_id(render_process_host_id, render_view_id);
75 g_in_preview_mode.Get()[web_contents_id] = data; 63 g_in_preview_mode.Get()[web_contents_id] = url.host();
76 } 64 }
77 65
78 // static 66 // static
79 void ManagedModeResourceThrottle::UpdateExceptionNavigationStatus(
80 int render_process_host_id,
81 int render_view_id,
82 bool new_navigation) {
83 PreviewMap* preview_map = g_in_preview_mode.Pointer();
84 WebContentsId web_contents_id(render_process_host_id, render_view_id);
85 PreviewMap::iterator it = preview_map->find(web_contents_id);
86 if (it == preview_map->end())
87 return;
88
89 it->second.new_navigation = new_navigation;
90 }
91
92 // static
93 void ManagedModeResourceThrottle::RemoveTemporaryException( 67 void ManagedModeResourceThrottle::RemoveTemporaryException(
94 int render_process_host_id, 68 int render_process_host_id,
95 int render_view_id) { 69 int render_view_id) {
96 WebContentsId web_contents_id(render_process_host_id, render_view_id); 70 WebContentsId web_contents_id(render_process_host_id, render_view_id);
97 g_in_preview_mode.Get().erase(web_contents_id); 71 g_in_preview_mode.Get().erase(web_contents_id);
98 } 72 }
99 73
100 void ManagedModeResourceThrottle::ShowInterstitialIfNeeded(bool is_redirect, 74 void ManagedModeResourceThrottle::ShowInterstitialIfNeeded(bool is_redirect,
101 const GURL& url, 75 const GURL& url,
102 bool* defer) { 76 bool* defer) {
103 // Only treat main frame requests for now (ignoring subresources). 77 // Only treat main frame requests for now (ignoring subresources).
104 if (!is_main_frame_) 78 if (!is_main_frame_)
105 return; 79 return;
106 80
107 if (url_filter_->GetFilteringBehaviorForURL(url) != 81 if (url_filter_->GetFilteringBehaviorForURL(url) !=
108 ManagedModeURLFilter::BLOCK) { 82 ManagedModeURLFilter::BLOCK) {
109 return; 83 return;
110 } 84 }
111 85
112 // Do not show interstitial for redirects in preview mode and URLs which have 86 // Do not show interstitial for redirects in preview mode and URLs which have
113 // the same hostname as the one on which the user clicked "Preview" on. 87 // the same hostname as the one on which the user clicked "Preview" on.
114 PreviewMap* preview_map = g_in_preview_mode.Pointer(); 88 PreviewMap* preview_map = g_in_preview_mode.Pointer();
115 if (temporarily_allowed_) { 89 if (temporarily_allowed_) {
116 DCHECK(is_redirect); 90 DCHECK(is_redirect);
117 return; 91 return;
118 } 92 }
119 93
120 WebContentsId web_contents_id(render_process_host_id_, render_view_id_); 94 WebContentsId web_contents_id(render_process_host_id_, render_view_id_);
121 PreviewMap::iterator it = preview_map->find(web_contents_id); 95 PreviewMap::iterator it = preview_map->find(web_contents_id);
122 if (it != preview_map->end() && 96 if (it != preview_map->end() && url.host() == it->second) {
123 (!it->second.new_navigation || url.host() == it->second.host)) {
124 temporarily_allowed_ = true; 97 temporarily_allowed_ = true;
125 RemoveTemporaryException(render_process_host_id_, render_view_id_); 98 RemoveTemporaryException(render_process_host_id_, render_view_id_);
126 return; 99 return;
127 } 100 }
128 101
129 *defer = true; 102 *defer = true;
130 ManagedModeInterstitial::ShowInterstitial( 103 ManagedModeInterstitial::ShowInterstitial(
131 render_process_host_id_, render_view_id_, url, 104 render_process_host_id_, render_view_id_, url,
132 base::Bind(&ManagedModeResourceThrottle::OnInterstitialResult, 105 base::Bind(&ManagedModeResourceThrottle::OnInterstitialResult,
133 weak_ptr_factory_.GetWeakPtr())); 106 weak_ptr_factory_.GetWeakPtr()));
134 } 107 }
135 108
136 void ManagedModeResourceThrottle::WillStartRequest(bool* defer) { 109 void ManagedModeResourceThrottle::WillStartRequest(bool* defer) {
137 ShowInterstitialIfNeeded(false, request_->url(), defer); 110 ShowInterstitialIfNeeded(false, request_->url(), defer);
138 } 111 }
139 112
140 void ManagedModeResourceThrottle::WillRedirectRequest(const GURL& new_url, 113 void ManagedModeResourceThrottle::WillRedirectRequest(const GURL& new_url,
141 bool* defer) { 114 bool* defer) {
142 ShowInterstitialIfNeeded(true, new_url, defer); 115 ShowInterstitialIfNeeded(true, new_url, defer);
143 } 116 }
144 117
145 void ManagedModeResourceThrottle::OnInterstitialResult(bool continue_request) { 118 void ManagedModeResourceThrottle::OnInterstitialResult(bool continue_request) {
146 if (continue_request) { 119 if (continue_request) {
147 temporarily_allowed_ = true; 120 temporarily_allowed_ = true;
148 controller()->Resume(); 121 controller()->Resume();
149 } else { 122 } else {
150 controller()->Cancel(); 123 controller()->Cancel();
151 } 124 }
152 } 125 }
OLDNEW
« no previous file with comments | « chrome/browser/managed_mode/managed_mode_resource_throttle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698