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

Side by Side Diff: chrome/browser/shell_integration.cc

Issue 1657933003: Fixes the interactive default browser UX for policy setting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix merge issue Created 4 years, 10 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
« no previous file with comments | « chrome/browser/shell_integration.h ('k') | chrome/browser/ui/apps/chrome_app_delegate.cc » ('j') | 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/shell_integration.h" 5 #include "chrome/browser/shell_integration.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 140
141 #if !defined(OS_WIN) 141 #if !defined(OS_WIN)
142 base::string16 GetAppShortcutsSubdirName() { 142 base::string16 GetAppShortcutsSubdirName() {
143 if (chrome::GetChannel() == version_info::Channel::CANARY) 143 if (chrome::GetChannel() == version_info::Channel::CANARY)
144 return l10n_util::GetStringUTF16(IDS_APP_SHORTCUTS_SUBDIR_NAME_CANARY); 144 return l10n_util::GetStringUTF16(IDS_APP_SHORTCUTS_SUBDIR_NAME_CANARY);
145 return l10n_util::GetStringUTF16(IDS_APP_SHORTCUTS_SUBDIR_NAME); 145 return l10n_util::GetStringUTF16(IDS_APP_SHORTCUTS_SUBDIR_NAME);
146 } 146 }
147 #endif // !defined(OS_WIN) 147 #endif // !defined(OS_WIN)
148 148
149 /////////////////////////////////////////////////////////////////////////////// 149 ///////////////////////////////////////////////////////////////////////////////
150 // DefaultWebClientObserver
151 //
152
153 bool DefaultWebClientObserver::IsOwnedByWorker() {
154 return false;
155 }
156
157 bool DefaultWebClientObserver::IsInteractiveSetDefaultPermitted() {
158 return false;
159 }
160
161 ///////////////////////////////////////////////////////////////////////////////
162 // DefaultWebClientWorker 150 // DefaultWebClientWorker
163 // 151 //
164 152
165 DefaultWebClientWorker::DefaultWebClientWorker( 153 DefaultWebClientWorker::DefaultWebClientWorker(
166 DefaultWebClientObserver* observer) 154 DefaultWebClientObserver* observer,
167 : observer_(observer) {} 155 bool delete_observer)
156 : observer_(observer), delete_observer_(delete_observer) {}
168 157
169 void DefaultWebClientWorker::StartCheckIsDefault() { 158 void DefaultWebClientWorker::StartCheckIsDefault() {
170 if (observer_) 159 if (observer_)
171 observer_->SetDefaultWebClientUIState(STATE_PROCESSING); 160 observer_->SetDefaultWebClientUIState(STATE_PROCESSING);
172 161
173 BrowserThread::PostTask( 162 BrowserThread::PostTask(
174 BrowserThread::FILE, FROM_HERE, 163 BrowserThread::FILE, FROM_HERE,
175 base::Bind(&DefaultWebClientWorker::CheckIsDefault, this)); 164 base::Bind(&DefaultWebClientWorker::CheckIsDefault, this));
176 } 165 }
177 166
178 void DefaultWebClientWorker::StartSetAsDefault() { 167 void DefaultWebClientWorker::StartSetAsDefault() {
179 // Cancel the already running process if another start is requested. 168 // Cancel the already running process if another start is requested.
180 if (set_as_default_in_progress_) { 169 if (set_as_default_in_progress_) {
181 if (set_as_default_initialized_) { 170 if (set_as_default_initialized_) {
182 FinalizeSetAsDefault(); 171 FinalizeSetAsDefault();
183 set_as_default_initialized_ = false; 172 set_as_default_initialized_ = false;
184 } 173 }
185 174
186 ReportAttemptResult(AttemptResult::RETRY); 175 ReportAttemptResult(AttemptResult::RETRY);
187 } 176 }
188 177
189 set_as_default_in_progress_ = true; 178 set_as_default_in_progress_ = true;
190 bool interactive_permitted = true; 179 if (observer_)
191 if (observer_) {
192 observer_->SetDefaultWebClientUIState(STATE_PROCESSING); 180 observer_->SetDefaultWebClientUIState(STATE_PROCESSING);
193 interactive_permitted = observer_->IsInteractiveSetDefaultPermitted();
194 }
195 181
196 set_as_default_initialized_ = InitializeSetAsDefault(); 182 set_as_default_initialized_ = InitializeSetAsDefault();
197 183
198 // Remember the start time. 184 // Remember the start time.
199 start_time_ = base::TimeTicks::Now(); 185 start_time_ = base::TimeTicks::Now();
200 186
201 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 187 BrowserThread::PostTask(
202 base::Bind(&DefaultWebClientWorker::SetAsDefault, 188 BrowserThread::FILE, FROM_HERE,
203 this, interactive_permitted)); 189 base::Bind(&DefaultWebClientWorker::SetAsDefault, this));
204 } 190 }
205 191
206 void DefaultWebClientWorker::ObserverDestroyed() { 192 void DefaultWebClientWorker::ObserverDestroyed() {
207 // Our associated view has gone away, so we shouldn't call back to it if 193 // Our associated view has gone away, so we shouldn't call back to it if
208 // our worker thread returns after the view is dead. 194 // our worker thread returns after the view is dead.
209 DCHECK_CURRENTLY_ON(BrowserThread::UI); 195 DCHECK_CURRENTLY_ON(BrowserThread::UI);
210 observer_ = nullptr; 196 observer_ = nullptr;
211 197
212 if (set_as_default_initialized_) { 198 if (set_as_default_initialized_) {
213 FinalizeSetAsDefault(); 199 FinalizeSetAsDefault();
(...skipping 17 matching lines...) Expand all
231 if (check_default_should_report_success_) { 217 if (check_default_should_report_success_) {
232 check_default_should_report_success_ = false; 218 check_default_should_report_success_ = false;
233 219
234 ReportAttemptResult(state == DefaultWebClientState::IS_DEFAULT 220 ReportAttemptResult(state == DefaultWebClientState::IS_DEFAULT
235 ? AttemptResult::SUCCESS 221 ? AttemptResult::SUCCESS
236 : AttemptResult::NO_ERRORS_NOT_DEFAULT); 222 : AttemptResult::NO_ERRORS_NOT_DEFAULT);
237 } 223 }
238 224
239 // The worker has finished everything it needs to do, so free the observer 225 // The worker has finished everything it needs to do, so free the observer
240 // if we own it. 226 // if we own it.
241 if (observer_ && observer_->IsOwnedByWorker()) { 227 if (observer_ && delete_observer_) {
242 delete observer_; 228 delete observer_;
243 observer_ = nullptr; 229 observer_ = nullptr;
244 } 230 }
245 } 231 }
246 232
247 void DefaultWebClientWorker::OnSetAsDefaultAttemptComplete( 233 void DefaultWebClientWorker::OnSetAsDefaultAttemptComplete(
248 AttemptResult result) { 234 AttemptResult result) {
249 DCHECK_CURRENTLY_ON(BrowserThread::UI); 235 DCHECK_CURRENTLY_ON(BrowserThread::UI);
250 // Hold on to a reference because if this was called via the default browser 236 // Hold on to a reference because if this was called via the default browser
251 // callback in StartupBrowserCreator, clearing the callback in 237 // callback in StartupBrowserCreator, clearing the callback in
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 break; 342 break;
357 } 343 }
358 NOTREACHED(); 344 NOTREACHED();
359 return ""; 345 return "";
360 } 346 }
361 347
362 /////////////////////////////////////////////////////////////////////////////// 348 ///////////////////////////////////////////////////////////////////////////////
363 // DefaultBrowserWorker 349 // DefaultBrowserWorker
364 // 350 //
365 351
366 DefaultBrowserWorker::DefaultBrowserWorker(DefaultWebClientObserver* observer) 352 DefaultBrowserWorker::DefaultBrowserWorker(DefaultWebClientObserver* observer,
367 : DefaultWebClientWorker(observer) {} 353 bool delete_observer)
354 : DefaultWebClientWorker(observer, delete_observer) {}
368 355
369 DefaultBrowserWorker::~DefaultBrowserWorker() {} 356 DefaultBrowserWorker::~DefaultBrowserWorker() {}
370 357
371 /////////////////////////////////////////////////////////////////////////////// 358 ///////////////////////////////////////////////////////////////////////////////
372 // DefaultBrowserWorker, private: 359 // DefaultBrowserWorker, private:
373 360
374 void DefaultBrowserWorker::CheckIsDefault() { 361 void DefaultBrowserWorker::CheckIsDefault() {
375 DefaultWebClientState state = GetDefaultBrowser(); 362 DefaultWebClientState state = GetDefaultBrowser();
376 BrowserThread::PostTask( 363 BrowserThread::PostTask(
377 BrowserThread::UI, FROM_HERE, 364 BrowserThread::UI, FROM_HERE,
378 base::Bind(&DefaultBrowserWorker::OnCheckIsDefaultComplete, this, state)); 365 base::Bind(&DefaultBrowserWorker::OnCheckIsDefaultComplete, this, state));
379 } 366 }
380 367
381 void DefaultBrowserWorker::SetAsDefault(bool interactive_permitted) { 368 void DefaultBrowserWorker::SetAsDefault() {
382 AttemptResult result = AttemptResult::FAILURE; 369 AttemptResult result = AttemptResult::FAILURE;
383 switch (CanSetAsDefaultBrowser()) { 370 switch (CanSetAsDefaultBrowser()) {
384 case SET_DEFAULT_NOT_ALLOWED: 371 case SET_DEFAULT_NOT_ALLOWED:
385 NOTREACHED(); 372 NOTREACHED();
386 break; 373 break;
387 case SET_DEFAULT_UNATTENDED: 374 case SET_DEFAULT_UNATTENDED:
388 if (SetAsDefaultBrowser()) 375 if (SetAsDefaultBrowser())
389 result = AttemptResult::SUCCESS; 376 result = AttemptResult::SUCCESS;
390 break; 377 break;
391 case SET_DEFAULT_INTERACTIVE: 378 case SET_DEFAULT_INTERACTIVE:
392 if (interactive_permitted && SetAsDefaultBrowserInteractive()) 379 if (interactive_permitted_ && SetAsDefaultBrowserInteractive())
393 result = AttemptResult::SUCCESS; 380 result = AttemptResult::SUCCESS;
394 break; 381 break;
395 case SET_DEFAULT_ASYNCHRONOUS: 382 case SET_DEFAULT_ASYNCHRONOUS:
396 #if defined(OS_WIN) 383 #if defined(OS_WIN)
397 if (!interactive_permitted) 384 if (!interactive_permitted_)
398 break; 385 break;
399 if (GetDefaultBrowser() == IS_DEFAULT) { 386 if (GetDefaultBrowser() == IS_DEFAULT) {
400 // Don't start the asynchronous operation since it could result in 387 // Don't start the asynchronous operation since it could result in
401 // losing the default browser status. 388 // losing the default browser status.
402 result = AttemptResult::ALREADY_DEFAULT; 389 result = AttemptResult::ALREADY_DEFAULT;
403 break; 390 break;
404 } 391 }
405 // This function will cause OnSetAsDefaultAttemptComplete() to be called 392 // This function will cause OnSetAsDefaultAttemptComplete() to be called
406 // asynchronously via a filter established in InitializeSetAsDefault(). 393 // asynchronously via a filter established in InitializeSetAsDefault().
407 if (!SetAsDefaultBrowserAsynchronous()) { 394 if (!SetAsDefaultBrowserAsynchronous()) {
(...skipping 15 matching lines...) Expand all
423 const char* DefaultBrowserWorker::GetHistogramPrefix() { 410 const char* DefaultBrowserWorker::GetHistogramPrefix() {
424 return "DefaultBrowser"; 411 return "DefaultBrowser";
425 } 412 }
426 413
427 /////////////////////////////////////////////////////////////////////////////// 414 ///////////////////////////////////////////////////////////////////////////////
428 // DefaultProtocolClientWorker 415 // DefaultProtocolClientWorker
429 // 416 //
430 417
431 DefaultProtocolClientWorker::DefaultProtocolClientWorker( 418 DefaultProtocolClientWorker::DefaultProtocolClientWorker(
432 DefaultWebClientObserver* observer, 419 DefaultWebClientObserver* observer,
433 const std::string& protocol) 420 const std::string& protocol,
434 : DefaultWebClientWorker(observer), protocol_(protocol) {} 421 bool delete_observer)
422 : DefaultWebClientWorker(observer, delete_observer), protocol_(protocol) {}
435 423
436 /////////////////////////////////////////////////////////////////////////////// 424 ///////////////////////////////////////////////////////////////////////////////
437 // DefaultProtocolClientWorker, private: 425 // DefaultProtocolClientWorker, private:
438 426
439 DefaultProtocolClientWorker::~DefaultProtocolClientWorker() {} 427 DefaultProtocolClientWorker::~DefaultProtocolClientWorker() {}
440 428
441 void DefaultProtocolClientWorker::CheckIsDefault() { 429 void DefaultProtocolClientWorker::CheckIsDefault() {
442 DefaultWebClientState state = IsDefaultProtocolClient(protocol_); 430 DefaultWebClientState state = IsDefaultProtocolClient(protocol_);
443 BrowserThread::PostTask( 431 BrowserThread::PostTask(
444 BrowserThread::UI, FROM_HERE, 432 BrowserThread::UI, FROM_HERE,
445 base::Bind(&DefaultProtocolClientWorker::OnCheckIsDefaultComplete, this, 433 base::Bind(&DefaultProtocolClientWorker::OnCheckIsDefaultComplete, this,
446 state)); 434 state));
447 } 435 }
448 436
449 void DefaultProtocolClientWorker::SetAsDefault(bool interactive_permitted) { 437 void DefaultProtocolClientWorker::SetAsDefault() {
450 AttemptResult result = AttemptResult::FAILURE; 438 AttemptResult result = AttemptResult::FAILURE;
451 switch (CanSetAsDefaultProtocolClient()) { 439 switch (CanSetAsDefaultProtocolClient()) {
452 case SET_DEFAULT_NOT_ALLOWED: 440 case SET_DEFAULT_NOT_ALLOWED:
453 // Not allowed, do nothing. 441 // Not allowed, do nothing.
454 break; 442 break;
455 case SET_DEFAULT_UNATTENDED: 443 case SET_DEFAULT_UNATTENDED:
456 if (SetAsDefaultProtocolClient(protocol_)) 444 if (SetAsDefaultProtocolClient(protocol_))
457 result = AttemptResult::SUCCESS; 445 result = AttemptResult::SUCCESS;
458 break; 446 break;
459 case SET_DEFAULT_INTERACTIVE: 447 case SET_DEFAULT_INTERACTIVE:
460 if (interactive_permitted && 448 if (interactive_permitted_ &&
461 SetAsDefaultProtocolClientInteractive(protocol_)) { 449 SetAsDefaultProtocolClientInteractive(protocol_)) {
462 result = AttemptResult::SUCCESS; 450 result = AttemptResult::SUCCESS;
463 } 451 }
464 break; 452 break;
465 case SET_DEFAULT_ASYNCHRONOUS: 453 case SET_DEFAULT_ASYNCHRONOUS:
466 NOTREACHED(); 454 NOTREACHED();
467 break; 455 break;
468 } 456 }
469 BrowserThread::PostTask( 457 BrowserThread::PostTask(
470 BrowserThread::UI, FROM_HERE, 458 BrowserThread::UI, FROM_HERE,
471 base::Bind(&DefaultProtocolClientWorker::OnSetAsDefaultAttemptComplete, 459 base::Bind(&DefaultProtocolClientWorker::OnSetAsDefaultAttemptComplete,
472 this, result)); 460 this, result));
473 } 461 }
474 462
475 const char* DefaultProtocolClientWorker::GetHistogramPrefix() { 463 const char* DefaultProtocolClientWorker::GetHistogramPrefix() {
476 return "DefaultProtocolClient"; 464 return "DefaultProtocolClient";
477 } 465 }
478 466
479 } // namespace shell_integration 467 } // namespace shell_integration
OLDNEW
« no previous file with comments | « chrome/browser/shell_integration.h ('k') | chrome/browser/ui/apps/chrome_app_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698