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

Side by Side Diff: chrome/browser/ui/cocoa/user_manager_mac.mm

Issue 229163004: [Mac] Move profile related UI from cocoa/browser to cocoa/profiles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: oops forgot a comment Created 6 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/ui/cocoa/user_manager_mac.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/cocoa/user_manager_mac.h"
6
7 #include "chrome/browser/browser_process.h"
8 #include "chrome/browser/profiles/profile_manager.h"
9 #include "chrome/browser/ui/browser_dialogs.h"
10 #include "content/public/browser/web_contents.h"
11 #include "content/public/browser/web_contents_view.h"
12 #include "grit/generated_resources.h"
13 #include "ui/base/l10n/l10n_util_mac.h"
14
15 // Default window size. Taken from the views implementation in
16 // chrome/browser/ui/views/user_manager_view.cc.
17 // TODO(noms): Figure out if this size can be computed dynamically or adjusted
18 // for smaller screens.
19 const int kWindowWidth = 900;
20 const int kWindowHeight = 700;
21
22 namespace chrome {
23
24 // Declared in browser_dialogs.h so others don't have to depend on this header.
25 void ShowUserManager(const base::FilePath& profile_path_to_focus) {
26 UserManagerMac::Show(
27 profile_path_to_focus, profiles::USER_MANAGER_NO_TUTORIAL);
28 }
29
30 void ShowUserManagerWithTutorial(profiles::UserManagerTutorialMode tutorial) {
31 UserManagerMac::Show(base::FilePath(), tutorial);
32 }
33
34 void HideUserManager() {
35 UserManagerMac::Hide();
36 }
37
38 } // namespace chrome
39
40 // Window controller for the User Manager view.
41 @interface UserManagerWindowController : NSWindowController <NSWindowDelegate> {
42 @private
43 scoped_ptr<content::WebContents> webContents_;
44 UserManagerMac* userManagerObserver_; // Weak.
45 }
46 - (void)windowWillClose:(NSNotification*)notification;
47 - (void)dealloc;
48 - (id)initWithProfile:(Profile*)profile
49 withObserver:(UserManagerMac*)userManagerObserver;
50 - (void)showURL:(const GURL&)url;
51 - (void)show;
52 - (void)close;
53 - (BOOL)isVisible;
54 @end
55
56 @implementation UserManagerWindowController
57
58 - (id)initWithProfile:(Profile*)profile
59 withObserver:(UserManagerMac*)userManagerObserver {
60
61 // Center the window on the primary screen.
62 CGFloat screenHeight =
63 [[[NSScreen screens] objectAtIndex:0] frame].size.height;
64 CGFloat screenWidth =
65 [[[NSScreen screens] objectAtIndex:0] frame].size.width;
66
67 NSRect contentRect = NSMakeRect((screenWidth - kWindowWidth) / 2,
68 (screenHeight - kWindowHeight) / 2,
69 kWindowWidth, kWindowHeight);
70 NSWindow* window = [[NSWindow alloc]
71 initWithContentRect:contentRect
72 styleMask:NSTitledWindowMask |
73 NSClosableWindowMask |
74 NSResizableWindowMask
75 backing:NSBackingStoreBuffered
76 defer:NO];
77 [window setTitle:l10n_util::GetNSString(IDS_USER_MANAGER_SCREEN_TITLE)];
78
79 if ((self = [super initWithWindow:window])) {
80 userManagerObserver_ = userManagerObserver;
81
82 // Initialize the web view.
83 webContents_.reset(content::WebContents::Create(
84 content::WebContents::CreateParams(profile)));
85 window.contentView = webContents_->GetView()->GetNativeView();
86 DCHECK(window.contentView);
87
88 [[NSNotificationCenter defaultCenter]
89 addObserver:self
90 selector:@selector(windowWillClose:)
91 name:NSWindowWillCloseNotification
92 object:self.window];
93 }
94 return self;
95 }
96
97 - (void)dealloc {
98 [[NSNotificationCenter defaultCenter] removeObserver:self];
99 [super dealloc];
100 }
101
102 - (void)showURL:(const GURL&)url {
103 webContents_->GetController().LoadURL(url, content::Referrer(),
104 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
105 std::string());
106 [self show];
107 }
108
109 - (void)show {
110 [[self window] makeKeyAndOrderFront:self];
111 }
112
113 - (void)close {
114 [[self window] close];
115 }
116
117 -(BOOL)isVisible {
118 return [[self window] isVisible];
119 }
120
121 - (void)windowWillClose:(NSNotification*)notification {
122 [[NSNotificationCenter defaultCenter] removeObserver:self];
123 DCHECK(userManagerObserver_);
124 userManagerObserver_->WindowWasClosed();
125 }
126
127 @end
128
129 // static
130 UserManagerMac* UserManagerMac::instance_ = NULL;
131
132 UserManagerMac::UserManagerMac(Profile* profile) {
133 window_controller_.reset([[UserManagerWindowController alloc]
134 initWithProfile:profile withObserver:this]);
135 }
136
137 UserManagerMac::~UserManagerMac() {
138 }
139
140 // static
141 void UserManagerMac::Show(const base::FilePath& profile_path_to_focus,
142 profiles::UserManagerTutorialMode tutorial_mode) {
143 if (instance_) {
144 // If there's a user manager window open already, just activate it.
145 [instance_->window_controller_ show];
146 return;
147 }
148
149 // Create the guest profile, if necessary, and open the User Manager
150 // from the guest profile.
151 profiles::CreateGuestProfileForUserManager(
152 profile_path_to_focus,
153 tutorial_mode,
154 base::Bind(&UserManagerMac::OnGuestProfileCreated));
155 }
156
157 // static
158 void UserManagerMac::Hide() {
159 if (instance_)
160 [instance_->window_controller_ close];
161 }
162
163 // static
164 bool UserManagerMac::IsShowing() {
165 return instance_ ? [instance_->window_controller_ isVisible]: false;
166 }
167
168 // static
169 void UserManagerMac::OnGuestProfileCreated(Profile* guest_profile,
170 const std::string& url) {
171 instance_ = new UserManagerMac(guest_profile);
172 [instance_->window_controller_ showURL:GURL(url)];
173 }
174
175 void UserManagerMac::WindowWasClosed() {
176 instance_ = NULL;
177 delete this;
178 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/user_manager_mac.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698