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

Side by Side Diff: chrome/browser/chromeos/platform_keys/platform_keys_service.cc

Issue 927293002: platformKeys: Hook up the certificate selection dialog to selectClientCertificates. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cert_perms
Patch Set: Rebased. Created 5 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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/chromeos/platform_keys/platform_keys_service.h" 5 #include "chrome/browser/chromeos/platform_keys/platform_keys_service.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 // This task determines all known client certs matching |request|. If 420 // This task determines all known client certs matching |request|. If
421 // |interactive| is true, calls |service->select_delegate_->Select()| to 421 // |interactive| is true, calls |service->select_delegate_->Select()| to
422 // select a cert from all matches. The extension with |extension_id| will be 422 // select a cert from all matches. The extension with |extension_id| will be
423 // granted unlimited sign permission for the selected cert. 423 // granted unlimited sign permission for the selected cert.
424 // Finally, either the selection or, if |interactive| is false, matching certs 424 // Finally, either the selection or, if |interactive| is false, matching certs
425 // that the extension has permission for are passed to |callback|. 425 // that the extension has permission for are passed to |callback|.
426 SelectTask(const platform_keys::ClientCertificateRequest& request, 426 SelectTask(const platform_keys::ClientCertificateRequest& request,
427 bool interactive, 427 bool interactive,
428 const std::string& extension_id, 428 const std::string& extension_id,
429 const SelectCertificatesCallback& callback, 429 const SelectCertificatesCallback& callback,
430 content::WebContents* web_contents,
430 PlatformKeysService* service) 431 PlatformKeysService* service)
431 : request_(request), 432 : request_(request),
432 interactive_(interactive), 433 interactive_(interactive),
433 extension_id_(extension_id), 434 extension_id_(extension_id),
434 callback_(callback), 435 callback_(callback),
436 web_contents_(web_contents),
435 service_(service), 437 service_(service),
436 weak_factory_(this) {} 438 weak_factory_(this) {}
437 ~SelectTask() override {} 439 ~SelectTask() override {}
438 440
439 void Start() override { 441 void Start() override {
440 CHECK(next_step_ == Step::GET_MATCHING_CERTS); 442 CHECK(next_step_ == Step::GET_MATCHING_CERTS);
441 DoStep(); 443 DoStep();
442 } 444 }
443 bool IsDone() override { return next_step_ == Step::DONE; } 445 bool IsDone() override { return next_step_ == Step::DONE; }
444 446
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 // Will call back to |GotSelection()|. 507 // Will call back to |GotSelection()|.
506 void SelectCerts() { 508 void SelectCerts() {
507 CHECK(interactive_); 509 CHECK(interactive_);
508 if (matches_.empty()) { 510 if (matches_.empty()) {
509 // Don't show a select dialog if no certificate is matching. 511 // Don't show a select dialog if no certificate is matching.
510 DoStep(); 512 DoStep();
511 return; 513 return;
512 } 514 }
513 service_->select_delegate_->Select( 515 service_->select_delegate_->Select(
514 extension_id_, matches_, 516 extension_id_, matches_,
515 base::Bind(&SelectTask::GotSelection, base::Unretained(this))); 517 base::Bind(&SelectTask::GotSelection, base::Unretained(this)),
518 web_contents_, service_->browser_context_);
516 } 519 }
517 520
518 // Will be called by |SelectCerts()| with the selected cert or null if no cert 521 // Will be called by |SelectCerts()| with the selected cert or null if no cert
519 // was selected. 522 // was selected.
520 void GotSelection(scoped_refptr<net::X509Certificate> selected_cert) { 523 void GotSelection(const scoped_refptr<net::X509Certificate>& selected_cert) {
521 selected_cert_ = selected_cert; 524 selected_cert_ = selected_cert;
522 DoStep(); 525 DoStep();
523 } 526 }
524 527
525 // Updates the extension's state store about unlimited sign permission for the 528 // Updates the extension's state store about unlimited sign permission for the
526 // selected cert. Does nothing if no cert was selected. 529 // selected cert. Does nothing if no cert was selected.
527 // Will call back to |DidUpdatePermission()|. 530 // Will call back to |DidUpdatePermission()|.
528 void UpdatePermission() { 531 void UpdatePermission() {
529 CHECK(interactive_); 532 CHECK(interactive_);
530 if (!selected_cert_) { 533 if (!selected_cert_) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 Step next_step_ = Step::GET_MATCHING_CERTS; 597 Step next_step_ = Step::GET_MATCHING_CERTS;
595 scoped_ptr<KeyEntries> platform_keys_; 598 scoped_ptr<KeyEntries> platform_keys_;
596 scoped_ptr<PermissionUpdateTask> permission_update_; 599 scoped_ptr<PermissionUpdateTask> permission_update_;
597 600
598 net::CertificateList matches_; 601 net::CertificateList matches_;
599 scoped_refptr<net::X509Certificate> selected_cert_; 602 scoped_refptr<net::X509Certificate> selected_cert_;
600 platform_keys::ClientCertificateRequest request_; 603 platform_keys::ClientCertificateRequest request_;
601 const bool interactive_; 604 const bool interactive_;
602 const std::string extension_id_; 605 const std::string extension_id_;
603 const SelectCertificatesCallback callback_; 606 const SelectCertificatesCallback callback_;
607 content::WebContents* const web_contents_;
604 PlatformKeysService* const service_; 608 PlatformKeysService* const service_;
605 base::WeakPtrFactory<SelectTask> weak_factory_; 609 base::WeakPtrFactory<SelectTask> weak_factory_;
606 610
607 DISALLOW_COPY_AND_ASSIGN(SelectTask); 611 DISALLOW_COPY_AND_ASSIGN(SelectTask);
608 }; 612 };
609 613
610 PlatformKeysService::SelectDelegate::SelectDelegate() { 614 PlatformKeysService::SelectDelegate::SelectDelegate() {
611 } 615 }
612 616
613 PlatformKeysService::SelectDelegate::~SelectDelegate() { 617 PlatformKeysService::SelectDelegate::~SelectDelegate() {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 681 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
678 StartOrQueueTask(make_scoped_ptr(new SignTask( 682 StartOrQueueTask(make_scoped_ptr(new SignTask(
679 token_id, data, public_key, true /* sign directly without hashing */, 683 token_id, data, public_key, true /* sign directly without hashing */,
680 platform_keys::HASH_ALGORITHM_NONE, extension_id, callback, this))); 684 platform_keys::HASH_ALGORITHM_NONE, extension_id, callback, this)));
681 } 685 }
682 686
683 void PlatformKeysService::SelectClientCertificates( 687 void PlatformKeysService::SelectClientCertificates(
684 const platform_keys::ClientCertificateRequest& request, 688 const platform_keys::ClientCertificateRequest& request,
685 bool interactive, 689 bool interactive,
686 const std::string& extension_id, 690 const std::string& extension_id,
687 const SelectCertificatesCallback& callback) { 691 const SelectCertificatesCallback& callback,
692 content::WebContents* web_contents) {
688 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 693 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
689 StartOrQueueTask(make_scoped_ptr( 694 StartOrQueueTask(make_scoped_ptr(new SelectTask(
690 new SelectTask(request, interactive, extension_id, callback, this))); 695 request, interactive, extension_id, callback, web_contents, this)));
691 } 696 }
692 697
693 void PlatformKeysService::StartOrQueueTask(scoped_ptr<Task> task) { 698 void PlatformKeysService::StartOrQueueTask(scoped_ptr<Task> task) {
694 tasks_.push(make_linked_ptr(task.release())); 699 tasks_.push(make_linked_ptr(task.release()));
695 if (tasks_.size() == 1) 700 if (tasks_.size() == 1)
696 tasks_.front()->Start(); 701 tasks_.front()->Start();
697 } 702 }
698 703
699 void PlatformKeysService::TaskFinished(Task* task) { 704 void PlatformKeysService::TaskFinished(Task* task) {
700 DCHECK(!tasks_.empty()); 705 DCHECK(!tasks_.empty());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 const GetPlatformKeysCallback& callback, 761 const GetPlatformKeysCallback& callback,
757 scoped_ptr<base::Value> value) { 762 scoped_ptr<base::Value> value) {
758 scoped_ptr<KeyEntries> key_entries(new KeyEntries); 763 scoped_ptr<KeyEntries> key_entries(new KeyEntries);
759 if (value) 764 if (value)
760 key_entries = KeyEntriesFromState(*value); 765 key_entries = KeyEntriesFromState(*value);
761 766
762 callback.Run(key_entries.Pass()); 767 callback.Run(key_entries.Pass());
763 } 768 }
764 769
765 } // namespace chromeos 770 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698