Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
| 6 | 6 |
| 7 #import "chrome/browser/ui/cocoa/browser/profile_chooser_controller.h" | 7 #import "chrome/browser/ui/cocoa/browser/profile_chooser_controller.h" |
| 8 | 8 |
| 9 #include "base/mac/bundle_locations.h" | 9 #include "base/mac/bundle_locations.h" |
| 10 #include "base/stl_util.h" | |
| 11 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 13 #include "chrome/browser/browser_process.h" | 12 #include "chrome/browser/browser_process.h" |
| 14 #include "chrome/browser/profiles/avatar_menu.h" | 13 #include "chrome/browser/profiles/avatar_menu.h" |
| 15 #include "chrome/browser/profiles/avatar_menu_observer.h" | 14 #include "chrome/browser/profiles/avatar_menu_observer.h" |
| 16 #include "chrome/browser/profiles/profile_info_cache.h" | 15 #include "chrome/browser/profiles/profile_info_cache.h" |
| 17 #include "chrome/browser/profiles/profile_info_util.h" | 16 #include "chrome/browser/profiles/profile_info_util.h" |
| 18 #include "chrome/browser/profiles/profile_manager.h" | 17 #include "chrome/browser/profiles/profile_manager.h" |
| 19 #include "chrome/browser/profiles/profile_window.h" | 18 #include "chrome/browser/profiles/profile_window.h" |
| 19 #include "chrome/browser/profiles/profiles_state.h" | |
| 20 #include "chrome/browser/signin/profile_oauth2_token_service.h" | 20 #include "chrome/browser/signin/profile_oauth2_token_service.h" |
| 21 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 21 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 22 #include "chrome/browser/signin/signin_manager.h" | 22 #include "chrome/browser/signin/signin_manager.h" |
| 23 #include "chrome/browser/signin/signin_manager_factory.h" | 23 #include "chrome/browser/signin/signin_manager_factory.h" |
| 24 #include "chrome/browser/signin/signin_promo.h" | 24 #include "chrome/browser/signin/signin_promo.h" |
| 25 #include "chrome/browser/ui/browser.h" | 25 #include "chrome/browser/ui/browser.h" |
| 26 #include "chrome/browser/ui/browser_dialogs.h" | 26 #include "chrome/browser/ui/browser_dialogs.h" |
| 27 #include "chrome/browser/ui/browser_window.h" | 27 #include "chrome/browser/ui/browser_window.h" |
| 28 #include "chrome/browser/ui/chrome_style.h" | 28 #include "chrome/browser/ui/chrome_style.h" |
| 29 #import "chrome/browser/ui/cocoa/info_bubble_view.h" | 29 #import "chrome/browser/ui/cocoa/info_bubble_view.h" |
| (...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 573 [container addSubview:accountEmails]; | 573 [container addSubview:accountEmails]; |
| 574 [container setFrameSize:NSMakeSize( | 574 [container setFrameSize:NSMakeSize( |
| 575 NSWidth([container frame]), NSMaxY([accountEmails frame]))]; | 575 NSWidth([container frame]), NSMaxY([accountEmails frame]))]; |
| 576 return container.autorelease(); | 576 return container.autorelease(); |
| 577 } | 577 } |
| 578 | 578 |
| 579 - (NSView*)createAccountsListWithRect:(NSRect)rect { | 579 - (NSView*)createAccountsListWithRect:(NSRect)rect { |
| 580 base::scoped_nsobject<NSView> container([[NSView alloc] initWithFrame:rect]); | 580 base::scoped_nsobject<NSView> container([[NSView alloc] initWithFrame:rect]); |
| 581 currentProfileAccounts_.clear(); | 581 currentProfileAccounts_.clear(); |
| 582 | 582 |
| 583 // The primary account should always be listed first. However, the vector | |
| 584 // returned by ProfileOAuth2TokenService::GetAccounts() will contain the | |
| 585 // primary account too. Ignore it when it appears later. | |
| 586 // TODO(rogerta): we still need to further differentiate the primary account | |
| 587 // from the others, so more work is likely required here: crbug.com/311124. | |
| 588 Profile* profile = browser_->profile(); | 583 Profile* profile = browser_->profile(); |
| 589 | |
| 590 // TODO(noms): This code is duplicated by the views implementation. See | |
| 591 // crbug.com/331805. | |
| 592 std::string primaryAccount = | 584 std::string primaryAccount = |
| 593 SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername(); | 585 SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername(); |
| 594 DCHECK(!primaryAccount.empty()); | 586 DCHECK(!primaryAccount.empty()); |
| 595 std::vector<std::string> accounts = | 587 std::vector<std::string>accounts = |
| 596 ProfileOAuth2TokenServiceFactory::GetForProfile(profile)->GetAccounts(); | 588 profiles::GetSecondaryAccountsForProfile(profile, primaryAccount); |
| 597 DCHECK_EQ(1, std::count_if(accounts.begin(), accounts.end(), | 589 |
| 598 std::bind1st(std::equal_to<std::string>(), | |
| 599 primaryAccount))); | |
| 600 rect.origin.y = 0; | 590 rect.origin.y = 0; |
| 601 for (size_t i = 0; i < accounts.size(); ++i) { | 591 for (size_t i = 0; i < accounts.size(); ++i) { |
| 602 // Save the original email address, as the button text could be elided. | 592 // Save the original email address, as the button text could be elided. |
| 603 currentProfileAccounts_[i] = accounts[i]; | 593 currentProfileAccounts_[i] = accounts[i]; |
| 604 if (primaryAccount != accounts[i]) { | 594 NSButton* accountButton = [self makeAccountButtonWithRect:rect |
| 605 NSButton* accountButton = [self makeAccountButtonWithRect:rect | 595 title:accounts[i] |
| 606 title:accounts[i] | 596 canBeDeleted:true]; |
| 607 canBeDeleted:true]; | 597 [accountButton setTag:i]; |
| 608 [accountButton setTag:i]; | 598 [container addSubview:accountButton]; |
| 609 [container addSubview:accountButton]; | 599 rect.origin.y = NSMaxY([accountButton frame]) + kSmallVerticalSpacing; |
| 610 rect.origin.y = NSMaxY([accountButton frame]) + kSmallVerticalSpacing; | |
| 611 } | |
| 612 } | 600 } |
| 613 | 601 |
| 614 // Add the primary account button. It doesn't need a tag, as it cannot be | 602 // The primary account should always be listed first. It doesn't need a tag, |
| 615 // removed. | 603 // as it cannot be removed. |
| 604 // TODO(rogerta): we still need to further differentiate the primary account | |
| 605 // from the others, so more work is likely required here: crbug.com/311124. | |
|
Alexei Svitkine (slow)
2014/01/08 21:28:37
Should this TODO be in the utility function? Or do
noms (inactive)
2014/01/08 21:35:13
Differentiate in the UI. Fixed.
On 2014/01/08 21:2
| |
| 616 NSButton* accountButton = [self makeAccountButtonWithRect:rect | 606 NSButton* accountButton = [self makeAccountButtonWithRect:rect |
| 617 title:primaryAccount | 607 title:primaryAccount |
| 618 canBeDeleted:false]; | 608 canBeDeleted:false]; |
| 619 [container addSubview:accountButton]; | 609 [container addSubview:accountButton]; |
| 620 [container setFrameSize:NSMakeSize(NSWidth([container frame]), | 610 [container setFrameSize:NSMakeSize(NSWidth([container frame]), |
| 621 NSMaxY([accountButton frame]))]; | 611 NSMaxY([accountButton frame]))]; |
| 622 return container.autorelease(); | 612 return container.autorelease(); |
| 623 } | 613 } |
| 624 | 614 |
| 625 - (NSView*) createGaiaEmbeddedView { | 615 - (NSView*) createGaiaEmbeddedView { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 692 [button setImagePosition:NSImageRight]; | 682 [button setImagePosition:NSImageRight]; |
| 693 [button setTarget:self]; | 683 [button setTarget:self]; |
| 694 [button setAction:@selector(removeAccount:)]; | 684 [button setAction:@selector(removeAccount:)]; |
| 695 } | 685 } |
| 696 | 686 |
| 697 return button.autorelease(); | 687 return button.autorelease(); |
| 698 } | 688 } |
| 699 | 689 |
| 700 @end | 690 @end |
| 701 | 691 |
| OLD | NEW |