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

Side by Side Diff: remoting/host/me2me_preference_pane.mm

Issue 10411032: Implement Mac pref-pane UI mockups (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 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 | « remoting/host/me2me_preference_pane.h ('k') | remoting/host/me2me_preference_pane.xib » ('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 #import "remoting/host/me2me_preference_pane.h" 5 #import "remoting/host/me2me_preference_pane.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 #include <CommonCrypto/CommonHMAC.h> 8 #include <CommonCrypto/CommonHMAC.h>
9 #include <launch.h> 9 #include <launch.h>
10 #import <PreferencePanes/PreferencePanes.h> 10 #import <PreferencePanes/PreferencePanes.h>
11 #import <SecurityInterface/SFAuthorizationView.h> 11 #import <SecurityInterface/SFAuthorizationView.h>
12 #include <unistd.h> 12 #include <unistd.h>
13 13
14 #include <fstream> 14 #include <fstream>
15 15
16 #include "base/eintr_wrapper.h" 16 #include "base/eintr_wrapper.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/mac/authorization_util.h" 18 #include "base/mac/authorization_util.h"
19 #include "base/mac/foundation_util.h" 19 #include "base/mac/foundation_util.h"
20 #include "base/mac/launchd.h" 20 #include "base/mac/launchd.h"
21 #include "base/mac/mac_logging.h" 21 #include "base/mac/mac_logging.h"
22 #include "base/mac/scoped_launch_data.h" 22 #include "base/mac/scoped_launch_data.h"
23 #include "base/memory/scoped_ptr.h" 23 #include "base/memory/scoped_ptr.h"
24 #include "base/stringprintf.h" 24 #include "base/stringprintf.h"
25 #include "base/sys_string_conversions.h" 25 #include "base/sys_string_conversions.h"
26 #include "remoting/host/host_config.h" 26 #include "remoting/host/host_config.h"
27 #import "remoting/host/me2me_preference_pane_confirm_pin.h"
28 #import "remoting/host/me2me_preference_pane_disable.h"
27 #include "third_party/jsoncpp/source/include/json/reader.h" 29 #include "third_party/jsoncpp/source/include/json/reader.h"
28 #include "third_party/jsoncpp/source/include/json/writer.h" 30 #include "third_party/jsoncpp/source/include/json/writer.h"
29 #include "third_party/modp_b64/modp_b64.h" 31 #include "third_party/modp_b64/modp_b64.h"
30 32
31 namespace { 33 namespace {
32 // The name of the Remoting Host service that is registered with launchd. 34 // The name of the Remoting Host service that is registered with launchd.
33 #define kServiceName "org.chromium.chromoting" 35 #define kServiceName "org.chromium.chromoting"
34 36
35 // Use separate named notifications for success and failure because sandboxed 37 // Use separate named notifications for success and failure because sandboxed
36 // components can't include a dictionary when sending distributed notifications. 38 // components can't include a dictionary when sending distributed notifications.
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 } 147 }
146 148
147 } // namespace remoting 149 } // namespace remoting
148 150
149 @implementation Me2MePreferencePane 151 @implementation Me2MePreferencePane
150 152
151 - (void)mainViewDidLoad { 153 - (void)mainViewDidLoad {
152 [authorization_view_ setDelegate:self]; 154 [authorization_view_ setDelegate:self];
153 [authorization_view_ setString:kAuthorizationRightExecute]; 155 [authorization_view_ setString:kAuthorizationRightExecute];
154 [authorization_view_ setAutoupdate:YES]; 156 [authorization_view_ setAutoupdate:YES];
157 confirm_pin_view_ = [[Me2MePreferencePaneConfirmPin alloc] init];
dcaiafa 2012/05/21 15:45:31 Leak in non-GC environment. I'd move the alloc/ini
158 [confirm_pin_view_ setDelegate:self];
159 disable_view_ = [[Me2MePreferencePaneDisable alloc] init];
160 [disable_view_ setDelegate:self];
155 } 161 }
156 162
157 - (void)willSelect { 163 - (void)willSelect {
158 have_new_config_ = NO; 164 have_new_config_ = NO;
159 165
160 NSDistributedNotificationCenter* center = 166 NSDistributedNotificationCenter* center =
161 [NSDistributedNotificationCenter defaultCenter]; 167 [NSDistributedNotificationCenter defaultCenter];
162 [center addObserver:self 168 [center addObserver:self
163 selector:@selector(onNewConfigFile:) 169 selector:@selector(onNewConfigFile:)
164 name:@kServiceName 170 name:@kServiceName
(...skipping 17 matching lines...) Expand all
182 [center removeObserver:self]; 188 [center removeObserver:self];
183 189
184 [service_status_timer_ invalidate]; 190 [service_status_timer_ invalidate];
185 [service_status_timer_ release]; 191 [service_status_timer_ release];
186 service_status_timer_ = nil; 192 service_status_timer_ = nil;
187 if (have_new_config_) { 193 if (have_new_config_) {
188 [self notifyPlugin: kUpdateFailedNotificationName]; 194 [self notifyPlugin: kUpdateFailedNotificationName];
189 } 195 }
190 } 196 }
191 197
192 - (void)onApply:(id)sender { 198 - (void)applyConfiguration:(id)sender
199 pin:(NSString*)pin {
193 if (!have_new_config_) { 200 if (!have_new_config_) {
194 // It shouldn't be possible to hit the button if there is no config to 201 // It shouldn't be possible to hit the button if there is no config to
195 // apply, but check anyway just in case it happens somehow. 202 // apply, but check anyway just in case it happens somehow.
196 return; 203 return;
197 } 204 }
198 205
199 // Ensure the authorization token is up-to-date before using it. 206 // Ensure the authorization token is up-to-date before using it.
200 [self updateAuthorizationStatus]; 207 [self updateAuthorizationStatus];
201 [self updateUI]; 208 [self updateUI];
202 209
203 std::string pin = base::SysNSStringToUTF8([pin_ stringValue]); 210 std::string pin_utf8 = base::SysNSStringToUTF8(pin);
204 std::string host_id, host_secret_hash; 211 std::string host_id, host_secret_hash;
205 bool result = (config_->GetString(remoting::kHostIdConfigPath, &host_id) && 212 bool result = (config_->GetString(remoting::kHostIdConfigPath, &host_id) &&
206 config_->GetString(remoting::kHostSecretHashConfigPath, 213 config_->GetString(remoting::kHostSecretHashConfigPath,
207 &host_secret_hash)); 214 &host_secret_hash));
208 DCHECK(result); 215 DCHECK(result);
209 if (!IsPinValid(pin, host_id, host_secret_hash)) { 216 if (!IsPinValid(pin_utf8, host_id, host_secret_hash)) {
210 [self showIncorrectPinMessage]; 217 [self showIncorrectPinMessage];
211 return; 218 return;
212 } 219 }
213 220
214 [self applyNewServiceConfig]; 221 [self applyNewServiceConfig];
215 [self updateUI]; 222 [self updateUI];
216 } 223 }
217 224
218 - (void)onDisable:(id)sender { 225 - (void)onDisable:(id)sender {
219 // Ensure the authorization token is up-to-date before using it. 226 // Ensure the authorization token is up-to-date before using it.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 } 293 }
287 remove(file.c_str()); 294 remove(file.c_str());
288 if (!IsConfigValid(new_config_.get())) { 295 if (!IsConfigValid(new_config_.get())) {
289 LOG(ERROR) << "Invalid configuration data read."; 296 LOG(ERROR) << "Invalid configuration data read.";
290 [self showError]; 297 [self showError];
291 return; 298 return;
292 } 299 }
293 300
294 config_.swap(new_config_); 301 config_.swap(new_config_);
295 have_new_config_ = YES; 302 have_new_config_ = YES;
303
304 [confirm_pin_view_ resetPin];
296 } 305 }
297 306
298 - (void)updateUI { 307 - (void)updateUI {
299 // TODO(lambroslambrou): These strings should be localized. 308 if (have_new_config_) {
300 #ifdef OFFICIAL_BUILD 309 [box_ setContentView:[confirm_pin_view_ view]];
301 NSString* name = @"Chrome Remote Desktop"; 310 } else {
302 #else 311 [box_ setContentView:[disable_view_ view]];
303 NSString* name = @"Chromoting"; 312 }
304 #endif 313
314 // TODO(lambroslambrou): Show "enabled" and "disabled" in bold font.
305 NSString* message; 315 NSString* message;
306 if (is_service_running_) { 316 if (is_service_running_) {
307 message = [NSString stringWithFormat:@"%@ is enabled", name]; 317 if (have_new_config_) {
318 message = @"Please confirm your new PIN.";
319 } else {
320 message = @"Remote connections to this computer are enabled.";
321 }
308 } else { 322 } else {
309 message = [NSString stringWithFormat:@"%@ is disabled", name]; 323 if (have_new_config_) {
324 message = @"Remote connections to this computer are disabled. To enable "
325 "remote connections you must confirm your PIN.";
326 } else {
327 message = @"Remote connections to this computer are disabled.";
328 }
310 } 329 }
311 [status_message_ setStringValue:message]; 330 [status_message_ setStringValue:message];
312 331
313 std::string email; 332 std::string email;
314 if (config_.get()) { 333 if (config_.get()) {
315 bool result = config_->GetString(remoting::kXmppLoginConfigPath, &email); 334 bool result = config_->GetString(remoting::kXmppLoginConfigPath, &email);
316 335
317 // The config has already been checked by |IsConfigValid|. 336 // The config has already been checked by |IsConfigValid|.
318 DCHECK(result); 337 DCHECK(result);
319 } 338 }
320 [email_ setStringValue:base::SysUTF8ToNSString(email)];
321 339
322 [disable_button_ setEnabled:(is_pane_unlocked_ && is_service_running_)]; 340 [disable_view_ setEnabled:(is_pane_unlocked_ && is_service_running_)];
323 [pin_instruction_message_ setEnabled:have_new_config_]; 341 [confirm_pin_view_ setEnabled:is_pane_unlocked_];
324 [email_ setEnabled:have_new_config_]; 342 [confirm_pin_view_ setEmail:base::SysUTF8ToNSString(email)];
325 [pin_ setEnabled:have_new_config_]; 343 NSString* applyButtonText = is_service_running_ ? @"Confirm" : @"Enable";
326 [apply_button_ setEnabled:(is_pane_unlocked_ && have_new_config_)]; 344 [confirm_pin_view_ setButtonText:applyButtonText];
327 } 345 }
328 346
329 - (void)showError { 347 - (void)showError {
330 NSAlert* alert = [[NSAlert alloc] init]; 348 NSAlert* alert = [[NSAlert alloc] init];
331 [alert setMessageText:@"An unexpected error occurred."]; 349 [alert setMessageText:@"An unexpected error occurred."];
332 [alert setInformativeText:@"Check the system log for more information."]; 350 [alert setInformativeText:@"Check the system log for more information."];
333 [alert setAlertStyle:NSWarningAlertStyle]; 351 [alert setAlertStyle:NSWarningAlertStyle];
334 [alert beginSheetModalForWindow:[[self mainView] window] 352 [alert beginSheetModalForWindow:[[self mainView] window]
335 modalDelegate:nil 353 modalDelegate:nil
336 didEndSelector:nil 354 didEndSelector:nil
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 - (void)notifyPlugin:(const char*)message { 509 - (void)notifyPlugin:(const char*)message {
492 NSDistributedNotificationCenter* center = 510 NSDistributedNotificationCenter* center =
493 [NSDistributedNotificationCenter defaultCenter]; 511 [NSDistributedNotificationCenter defaultCenter];
494 NSString* name = [NSString stringWithUTF8String:message]; 512 NSString* name = [NSString stringWithUTF8String:message];
495 [center postNotificationName:name 513 [center postNotificationName:name
496 object:nil 514 object:nil
497 userInfo:nil]; 515 userInfo:nil];
498 } 516 }
499 517
500 @end 518 @end
OLDNEW
« no previous file with comments | « remoting/host/me2me_preference_pane.h ('k') | remoting/host/me2me_preference_pane.xib » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698