OLD | NEW |
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 "chrome/browser/ui/cocoa/content_settings/collected_cookies_mac.h" | 5 #import "chrome/browser/ui/cocoa/content_settings/collected_cookies_mac.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/mac/bundle_locations.h" | 9 #include "base/mac/bundle_locations.h" |
10 #import "base/mac/mac_util.h" | |
11 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
12 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
13 #include "base/strings/sys_string_conversions.h" | 12 #include "base/strings/sys_string_conversions.h" |
14 #include "chrome/browser/browsing_data/browsing_data_appcache_helper.h" | |
15 #include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" | |
16 #include "chrome/browser/browsing_data/browsing_data_database_helper.h" | |
17 #include "chrome/browser/browsing_data/browsing_data_file_system_helper.h" | |
18 #include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h" | |
19 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" | |
20 #include "chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.h" | |
21 #include "chrome/browser/chrome_notification_types.h" | 13 #include "chrome/browser/chrome_notification_types.h" |
22 #include "chrome/browser/content_settings/cookie_settings.h" | 14 #include "chrome/browser/content_settings/cookie_settings.h" |
23 #include "chrome/browser/content_settings/local_shared_objects_container.h" | 15 #include "chrome/browser/content_settings/local_shared_objects_container.h" |
24 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 16 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
25 #include "chrome/browser/infobars/infobar_service.h" | 17 #include "chrome/browser/infobars/infobar_service.h" |
26 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
27 #include "chrome/browser/ui/browser_dialogs.h" | 19 #include "chrome/browser/ui/browser_dialogs.h" |
28 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sh
eet.h" | 20 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sh
eet.h" |
29 #import "chrome/browser/ui/cocoa/content_settings/cookie_details_view_controller
.h" | 21 #import "chrome/browser/ui/cocoa/content_settings/cookie_details_view_controller
.h" |
30 #import "chrome/browser/ui/cocoa/vertical_gradient_view.h" | 22 #import "chrome/browser/ui/cocoa/vertical_gradient_view.h" |
31 #include "chrome/browser/ui/collected_cookies_infobar_delegate.h" | 23 #include "chrome/browser/ui/collected_cookies_infobar_delegate.h" |
32 #include "chrome/common/pref_names.h" | 24 #include "chrome/common/pref_names.h" |
33 #include "content/public/browser/notification_details.h" | 25 #include "content/public/browser/notification_details.h" |
34 #include "content/public/browser/notification_source.h" | 26 #include "content/public/browser/notification_source.h" |
35 #include "content/public/browser/web_contents.h" | 27 #include "content/public/browser/web_contents.h" |
36 #include "content/public/browser/web_contents_view.h" | |
37 #include "grit/generated_resources.h" | 28 #include "grit/generated_resources.h" |
38 #include "grit/theme_resources.h" | 29 #include "grit/theme_resources.h" |
39 #include "third_party/apple_sample_code/ImageAndTextCell.h" | 30 #include "third_party/apple_sample_code/ImageAndTextCell.h" |
40 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h
" | 31 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h
" |
41 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTw
eaker.h" | 32 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTw
eaker.h" |
42 #include "ui/base/l10n/l10n_util_mac.h" | 33 #include "ui/base/l10n/l10n_util_mac.h" |
43 #include "ui/base/resource/resource_bundle.h" | 34 #include "ui/base/resource/resource_bundle.h" |
44 #include "ui/gfx/image/image.h" | 35 #include "ui/gfx/image/image.h" |
45 #include "ui/gfx/image/image_skia.h" | 36 #include "ui/gfx/image/image_skia.h" |
46 #include "ui/gfx/image/image_skia_util_mac.h" | 37 #include "ui/gfx/image/image_skia_util_mac.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 window_->CloseWebContentsModalDialog(); | 94 window_->CloseWebContentsModalDialog(); |
104 } | 95 } |
105 | 96 |
106 void CollectedCookiesMac::OnConstrainedWindowClosed( | 97 void CollectedCookiesMac::OnConstrainedWindowClosed( |
107 ConstrainedWindowMac* window) { | 98 ConstrainedWindowMac* window) { |
108 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 99 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
109 } | 100 } |
110 | 101 |
111 #pragma mark Window Controller | 102 #pragma mark Window Controller |
112 | 103 |
113 @interface CollectedCookiesWindowController(Private) | 104 @interface CollectedCookiesWindowController (Private) |
114 -(void)showInfoBarForDomain:(const base::string16&)domain | 105 - (void)showInfoBarForDomain:(const base::string16&)domain |
115 setting:(ContentSetting)setting; | 106 setting:(ContentSetting)setting; |
116 -(void)showInfoBarForMultipleDomainsAndSetting:(ContentSetting)setting; | 107 - (void)showInfoBarForMultipleDomainsAndSetting:(ContentSetting)setting; |
117 -(void)animateInfoBar; | 108 - (void)animateInfoBar; |
118 @end | 109 @end |
119 | 110 |
120 @implementation CollectedCookiesWindowController | 111 @implementation CollectedCookiesWindowController |
121 | 112 |
122 @synthesize allowedCookiesButtonsEnabled = | |
123 allowedCookiesButtonsEnabled_; | |
124 @synthesize blockedCookiesButtonsEnabled = | |
125 blockedCookiesButtonsEnabled_; | |
126 | |
127 @synthesize allowedTreeController = allowedTreeController_; | 113 @synthesize allowedTreeController = allowedTreeController_; |
128 @synthesize blockedTreeController = blockedTreeController_; | 114 @synthesize blockedTreeController = blockedTreeController_; |
129 @synthesize allowedOutlineView = allowedOutlineView_; | 115 @synthesize allowedOutlineView = allowedOutlineView_; |
130 @synthesize blockedOutlineView = blockedOutlineView_; | 116 @synthesize blockedOutlineView = blockedOutlineView_; |
131 @synthesize infoBar = infoBar_; | 117 @synthesize infoBar = infoBar_; |
132 @synthesize infoBarIcon = infoBarIcon_; | 118 @synthesize infoBarIcon = infoBarIcon_; |
133 @synthesize infoBarText = infoBarText_; | 119 @synthesize infoBarText = infoBarText_; |
134 @synthesize tabView = tabView_; | 120 @synthesize tabView = tabView_; |
135 @synthesize blockedScrollView = blockedScrollView_; | 121 @synthesize blockedScrollView = blockedScrollView_; |
136 @synthesize blockedCookiesText = blockedCookiesText_; | 122 @synthesize blockedCookiesText = blockedCookiesText_; |
137 @synthesize cookieDetailsViewPlaceholder = cookieDetailsViewPlaceholder_; | 123 @synthesize cookieDetailsViewPlaceholder = cookieDetailsViewPlaceholder_; |
138 | 124 |
| 125 @synthesize allowedCookiesButtonsEnabled = |
| 126 allowedCookiesButtonsEnabled_; |
| 127 @synthesize blockedCookiesButtonsEnabled = |
| 128 blockedCookiesButtonsEnabled_; |
| 129 @synthesize deleteCookiesButtonEnabled = deleteCookiesButtonEnabled_; |
| 130 |
139 - (id)initWithWebContents:(content::WebContents*)webContents | 131 - (id)initWithWebContents:(content::WebContents*)webContents |
140 collectedCookiesMac:(CollectedCookiesMac*)collectedCookiesMac { | 132 collectedCookiesMac:(CollectedCookiesMac*)collectedCookiesMac { |
141 DCHECK(webContents); | 133 DCHECK(webContents); |
142 | 134 |
143 NSString* nibpath = | 135 NSString* nibpath = |
144 [base::mac::FrameworkBundle() pathForResource:@"CollectedCookies" | 136 [base::mac::FrameworkBundle() pathForResource:@"CollectedCookies" |
145 ofType:@"nib"]; | 137 ofType:@"nib"]; |
146 if ((self = [super initWithWindowNibPath:nibpath owner:self])) { | 138 if ((self = [super initWithWindowNibPath:nibpath owner:self])) { |
147 webContents_ = webContents; | 139 webContents_ = webContents; |
148 collectedCookiesMac_ = collectedCookiesMac; | 140 collectedCookiesMac_ = collectedCookiesMac; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 lastDomain = host_node->GetTitle(); | 241 lastDomain = host_node->GetTitle(); |
250 } | 242 } |
251 if (multipleDomainsChanged) | 243 if (multipleDomainsChanged) |
252 [self showInfoBarForMultipleDomainsAndSetting:setting]; | 244 [self showInfoBarForMultipleDomainsAndSetting:setting]; |
253 else | 245 else |
254 [self showInfoBarForDomain:lastDomain setting:setting]; | 246 [self showInfoBarForDomain:lastDomain setting:setting]; |
255 contentSettingsChanged_ = YES; | 247 contentSettingsChanged_ = YES; |
256 } | 248 } |
257 | 249 |
258 - (IBAction)allowOrigin:(id)sender { | 250 - (IBAction)allowOrigin:(id)sender { |
259 [self addException:CONTENT_SETTING_ALLOW | 251 [self addException:CONTENT_SETTING_ALLOW |
260 forTreeController:blockedTreeController_]; | 252 forTreeController:blockedTreeController_]; |
261 } | 253 } |
262 | 254 |
263 - (IBAction)allowForSessionFromOrigin:(id)sender { | 255 - (IBAction)allowForSessionFromOrigin:(id)sender { |
264 [self addException:CONTENT_SETTING_SESSION_ONLY | 256 [self addException:CONTENT_SETTING_SESSION_ONLY |
265 forTreeController:blockedTreeController_]; | 257 forTreeController:blockedTreeController_]; |
266 } | 258 } |
267 | 259 |
268 - (IBAction)blockOrigin:(id)sender { | 260 - (IBAction)blockOrigin:(id)sender { |
269 [self addException:CONTENT_SETTING_BLOCK | 261 [self addException:CONTENT_SETTING_BLOCK |
270 forTreeController:allowedTreeController_]; | 262 forTreeController:allowedTreeController_]; |
271 } | 263 } |
272 | 264 |
| 265 - (IBAction)deleteSelected:(id)sender { |
| 266 NSArray* nodes = [allowedTreeController_ selectedNodes]; |
| 267 for (NSTreeNode* cocoaTreeNode in nodes) { |
| 268 CookieTreeNode* cookieNode = static_cast<CookieTreeNode*>( |
| 269 [[cocoaTreeNode representedObject] treeNode]); |
| 270 allowedTreeModel_->DeleteCookieNode(cookieNode); |
| 271 } |
| 272 } |
| 273 |
273 - (CocoaCookieTreeNode*)cocoaAllowedTreeModel { | 274 - (CocoaCookieTreeNode*)cocoaAllowedTreeModel { |
274 return cocoaAllowedTreeModel_.get(); | 275 return allowedControllerBridge_->cocoa_model(); |
275 } | |
276 - (void)setCocoaAllowedTreeModel:(CocoaCookieTreeNode*)model { | |
277 cocoaAllowedTreeModel_.reset([model retain]); | |
278 } | 276 } |
279 | 277 |
280 - (CookiesTreeModel*)allowedTreeModel { | 278 - (CookiesTreeModel*)allowedTreeModel { |
281 return allowedTreeModel_.get(); | 279 return allowedTreeModel_.get(); |
282 } | 280 } |
283 | 281 |
284 - (CocoaCookieTreeNode*)cocoaBlockedTreeModel { | 282 - (CocoaCookieTreeNode*)cocoaBlockedTreeModel { |
285 return cocoaBlockedTreeModel_.get(); | 283 return blockedControllerBridge_->cocoa_model(); |
286 } | |
287 - (void)setCocoaBlockedTreeModel:(CocoaCookieTreeNode*)model { | |
288 cocoaBlockedTreeModel_.reset([model retain]); | |
289 } | 284 } |
290 | 285 |
291 - (CookiesTreeModel*)blockedTreeModel { | 286 - (CookiesTreeModel*)blockedTreeModel { |
292 return blockedTreeModel_.get(); | 287 return blockedTreeModel_.get(); |
293 } | 288 } |
294 | 289 |
295 - (void)outlineView:(NSOutlineView*)outlineView | 290 - (void)outlineView:(NSOutlineView*)outlineView |
296 willDisplayCell:(id)cell | 291 willDisplayCell:(id)cell |
297 forTableColumn:(NSTableColumn*)tableColumn | 292 forTableColumn:(NSTableColumn*)tableColumn |
298 item:(id)item { | 293 item:(id)item { |
299 CocoaCookieTreeNode* node = [item representedObject]; | 294 CocoaCookieTreeNode* node = [item representedObject]; |
300 int index; | 295 int index; |
301 if (outlineView == allowedOutlineView_) | 296 if (outlineView == allowedOutlineView_) |
302 index = allowedTreeModel_->GetIconIndex([node treeNode]); | 297 index = allowedTreeModel_->GetIconIndex([node treeNode]); |
303 else | 298 else |
304 index = blockedTreeModel_->GetIconIndex([node treeNode]); | 299 index = blockedTreeModel_->GetIconIndex([node treeNode]); |
305 NSImage* icon = nil; | 300 NSImage* icon = nil; |
306 if (index >= 0) | 301 if (index >= 0) |
307 icon = [icons_ objectAtIndex:index]; | 302 icon = [icons_ objectAtIndex:index]; |
308 else | 303 else |
309 icon = [icons_ lastObject]; | 304 icon = [icons_ lastObject]; |
310 DCHECK([cell isKindOfClass:[ImageAndTextCell class]]); | 305 DCHECK([cell isKindOfClass:[ImageAndTextCell class]]); |
311 [static_cast<ImageAndTextCell*>(cell) setImage:icon]; | 306 [static_cast<ImageAndTextCell*>(cell) setImage:icon]; |
312 } | 307 } |
313 | 308 |
314 - (void)outlineViewSelectionDidChange:(NSNotification*)notif { | 309 - (void)outlineViewSelectionDidChange:(NSNotification*)notif { |
315 BOOL isAllowedOutlineView; | 310 BOOL isAllowedOutlineView; |
316 if ([notif object] == allowedOutlineView_) { | 311 if ([notif object] == allowedOutlineView_) { |
317 isAllowedOutlineView = YES; | 312 isAllowedOutlineView = YES; |
| 313 [self setDeleteCookiesButtonEnabled:YES]; |
318 } else if ([notif object] == blockedOutlineView_) { | 314 } else if ([notif object] == blockedOutlineView_) { |
319 isAllowedOutlineView = NO; | 315 isAllowedOutlineView = NO; |
| 316 [self setDeleteCookiesButtonEnabled:NO]; |
320 } else { | 317 } else { |
321 NOTREACHED(); | 318 NOTREACHED(); |
322 return; | 319 return; |
323 } | 320 } |
324 NSTreeController* controller = | 321 NSTreeController* controller = |
325 isAllowedOutlineView ? allowedTreeController_ : blockedTreeController_; | 322 isAllowedOutlineView ? allowedTreeController_ : blockedTreeController_; |
326 | 323 |
327 NSArray* nodes = [controller selectedNodes]; | 324 NSArray* nodes = [controller selectedNodes]; |
328 for (NSTreeNode* treeNode in nodes) { | 325 for (NSTreeNode* treeNode in nodes) { |
329 CocoaCookieTreeNode* node = [treeNode representedObject]; | 326 CocoaCookieTreeNode* node = [treeNode representedObject]; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 [icons_ addObject:gfx::NSImageFromImageSkia(*it)]; | 370 [icons_ addObject:gfx::NSImageFromImageSkia(*it)]; |
374 } | 371 } |
375 | 372 |
376 // Default icon will be the last item in the array. | 373 // Default icon will be the last item in the array. |
377 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 374 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
378 // TODO(rsesek): Rename this resource now that it's in multiple places. | 375 // TODO(rsesek): Rename this resource now that it's in multiple places. |
379 [icons_ addObject: | 376 [icons_ addObject: |
380 rb.GetNativeImageNamed(IDR_BOOKMARK_BAR_FOLDER).ToNSImage()]; | 377 rb.GetNativeImageNamed(IDR_BOOKMARK_BAR_FOLDER).ToNSImage()]; |
381 | 378 |
382 // Create the Cocoa model. | 379 // Create the Cocoa model. |
383 CookieTreeNode* root = | 380 allowedControllerBridge_.reset( |
384 static_cast<CookieTreeNode*>(allowedTreeModel_->GetRoot()); | 381 new CookiesTreeControllerBridge(allowedTreeModel_.get())); |
385 base::scoped_nsobject<CocoaCookieTreeNode> model( | 382 blockedControllerBridge_.reset( |
386 [[CocoaCookieTreeNode alloc] initWithNode:root]); | 383 new CookiesTreeControllerBridge(blockedTreeModel_.get())); |
387 [self setCocoaAllowedTreeModel:model.get()]; // Takes ownership. | |
388 root = static_cast<CookieTreeNode*>(blockedTreeModel_->GetRoot()); | |
389 model.reset( | |
390 [[CocoaCookieTreeNode alloc] initWithNode:root]); | |
391 [self setCocoaBlockedTreeModel:model.get()]; // Takes ownership. | |
392 } | 384 } |
393 | 385 |
394 -(void)showInfoBarForMultipleDomainsAndSetting:(ContentSetting)setting { | 386 - (void)showInfoBarForMultipleDomainsAndSetting:(ContentSetting)setting { |
395 NSString* label; | 387 NSString* label; |
396 switch (setting) { | 388 switch (setting) { |
397 case CONTENT_SETTING_BLOCK: | 389 case CONTENT_SETTING_BLOCK: |
398 label = l10n_util::GetNSString( | 390 label = l10n_util::GetNSString( |
399 IDS_COLLECTED_COOKIES_MULTIPLE_BLOCK_RULES_CREATED); | 391 IDS_COLLECTED_COOKIES_MULTIPLE_BLOCK_RULES_CREATED); |
400 break; | 392 break; |
401 | 393 |
402 case CONTENT_SETTING_ALLOW: | 394 case CONTENT_SETTING_ALLOW: |
403 label = l10n_util::GetNSString( | 395 label = l10n_util::GetNSString( |
404 IDS_COLLECTED_COOKIES_MULTIPLE_ALLOW_RULES_CREATED); | 396 IDS_COLLECTED_COOKIES_MULTIPLE_ALLOW_RULES_CREATED); |
405 break; | 397 break; |
406 | 398 |
407 case CONTENT_SETTING_SESSION_ONLY: | 399 case CONTENT_SETTING_SESSION_ONLY: |
408 label = l10n_util::GetNSString( | 400 label = l10n_util::GetNSString( |
409 IDS_COLLECTED_COOKIES_MULTIPLE_SESSION_RULES_CREATED); | 401 IDS_COLLECTED_COOKIES_MULTIPLE_SESSION_RULES_CREATED); |
410 break; | 402 break; |
411 | 403 |
412 default: | 404 default: |
413 NOTREACHED(); | 405 NOTREACHED(); |
414 label = [[[NSString alloc] init] autorelease]; | 406 label = [[[NSString alloc] init] autorelease]; |
415 } | 407 } |
416 [infoBarText_ setStringValue:label]; | 408 [infoBarText_ setStringValue:label]; |
417 [self animateInfoBar]; | 409 [self animateInfoBar]; |
418 } | 410 } |
419 | 411 |
420 -(void)showInfoBarForDomain:(const base::string16&)domain | 412 - (void)showInfoBarForDomain:(const base::string16&)domain |
421 setting:(ContentSetting)setting { | 413 setting:(ContentSetting)setting { |
422 NSString* label; | 414 NSString* label; |
423 switch (setting) { | 415 switch (setting) { |
424 case CONTENT_SETTING_BLOCK: | 416 case CONTENT_SETTING_BLOCK: |
425 label = l10n_util::GetNSStringF( | 417 label = l10n_util::GetNSStringF( |
426 IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED, | 418 IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED, |
427 domain); | 419 domain); |
428 break; | 420 break; |
429 | 421 |
430 case CONTENT_SETTING_ALLOW: | 422 case CONTENT_SETTING_ALLOW: |
431 label = l10n_util::GetNSStringF( | 423 label = l10n_util::GetNSStringF( |
432 IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED, | 424 IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED, |
433 domain); | 425 domain); |
434 break; | 426 break; |
435 | 427 |
436 case CONTENT_SETTING_SESSION_ONLY: | 428 case CONTENT_SETTING_SESSION_ONLY: |
437 label = l10n_util::GetNSStringF( | 429 label = l10n_util::GetNSStringF( |
438 IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED, | 430 IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED, |
439 domain); | 431 domain); |
440 break; | 432 break; |
441 | 433 |
442 default: | 434 default: |
443 NOTREACHED(); | 435 NOTREACHED(); |
444 label = [[[NSString alloc] init] autorelease]; | 436 label = [[[NSString alloc] init] autorelease]; |
445 } | 437 } |
446 [infoBarText_ setStringValue:label]; | 438 [infoBarText_ setStringValue:label]; |
447 [self animateInfoBar]; | 439 [self animateInfoBar]; |
448 } | 440 } |
449 | 441 |
450 -(void)animateInfoBar { | 442 - (void)animateInfoBar { |
451 if (infoBarVisible_) | 443 if (infoBarVisible_) |
452 return; | 444 return; |
453 | 445 |
454 infoBarVisible_ = YES; | 446 infoBarVisible_ = YES; |
455 | 447 |
456 NSMutableArray* animations = [NSMutableArray arrayWithCapacity:3]; | |
457 | |
458 NSWindow* sheet = [self window]; | 448 NSWindow* sheet = [self window]; |
459 NSRect sheetFrame = [sheet frame]; | 449 NSRect sheetFrame = [sheet frame]; |
460 NSRect infoBarFrame = [infoBar_ frame]; | 450 NSRect infoBarFrame = [infoBar_ frame]; |
461 NSRect tabViewFrame = [tabView_ frame]; | 451 NSRect tabViewFrame = [tabView_ frame]; |
462 | 452 |
463 // Calculate the end position of the info bar and set it to its start | 453 // Calculate the end position of the info bar and set it to its start |
464 // position. | 454 // position. |
465 infoBarFrame.origin.y = NSHeight(sheetFrame); | 455 infoBarFrame.origin.y = NSHeight(sheetFrame); |
466 infoBarFrame.size.width = NSWidth(sheetFrame); | 456 infoBarFrame.size.width = NSWidth(sheetFrame); |
467 [infoBar_ setFrame:infoBarFrame]; | 457 [infoBar_ setFrame:infoBarFrame]; |
468 [[[self window] contentView] addSubview:infoBar_]; | 458 [[[self window] contentView] addSubview:infoBar_]; |
469 | 459 |
470 // Calculate the new position of the sheet. | 460 // Calculate the new position of the sheet. |
471 sheetFrame.origin.y -= NSHeight(infoBarFrame); | 461 sheetFrame.origin.y -= NSHeight(infoBarFrame); |
472 sheetFrame.size.height += NSHeight(infoBarFrame); | 462 sheetFrame.size.height += NSHeight(infoBarFrame); |
473 | 463 |
474 // Slide the infobar in. | 464 NSArray* animations = @[ |
475 [animations addObject: | 465 // Slide the infobar in. |
476 [NSDictionary dictionaryWithObjectsAndKeys: | 466 @{ |
477 infoBar_, NSViewAnimationTargetKey, | 467 NSViewAnimationTargetKey : infoBar_, |
478 [NSValue valueWithRect:infoBarFrame], | 468 NSViewAnimationEndFrameKey : [NSValue valueWithRect:infoBarFrame] |
479 NSViewAnimationEndFrameKey, | 469 }, |
480 nil]]; | 470 // Make sure the tab view ends up in the right position. |
481 // Make sure the tab view ends up in the right position. | 471 @{ |
482 [animations addObject: | 472 NSViewAnimationTargetKey : tabView_, |
483 [NSDictionary dictionaryWithObjectsAndKeys: | 473 NSViewAnimationEndFrameKey : [NSValue valueWithRect:tabViewFrame] |
484 tabView_, NSViewAnimationTargetKey, | 474 }, |
485 [NSValue valueWithRect:tabViewFrame], | 475 // Grow the sheet. |
486 NSViewAnimationEndFrameKey, | 476 @{ |
487 nil]]; | 477 NSViewAnimationTargetKey : sheet, |
| 478 NSViewAnimationEndFrameKey : [NSValue valueWithRect:sheetFrame] |
| 479 } |
| 480 ]; |
488 | 481 |
489 // Grow the sheet. | |
490 [animations addObject: | |
491 [NSDictionary dictionaryWithObjectsAndKeys: | |
492 sheet, NSViewAnimationTargetKey, | |
493 [NSValue valueWithRect:sheetFrame], | |
494 NSViewAnimationEndFrameKey, | |
495 nil]]; | |
496 [animation_ setViewAnimations:animations]; | 482 [animation_ setViewAnimations:animations]; |
497 // The default duration is 0.5s, which actually feels slow in here, so speed | 483 // The default duration is 0.5s, which actually feels slow in here, so speed |
498 // it up a bit. | 484 // it up a bit. |
499 [animation_ gtm_setDuration:0.2 | 485 [animation_ gtm_setDuration:0.2 eventMask:NSLeftMouseUpMask]; |
500 eventMask:NSLeftMouseUpMask]; | |
501 [animation_ startAnimation]; | 486 [animation_ startAnimation]; |
502 } | 487 } |
503 | 488 |
504 - (void) tabView:(NSTabView*)tabView | 489 - (void)tabView:(NSTabView*)tabView |
505 didSelectTabViewItem:(NSTabViewItem*)tabViewItem { | 490 didSelectTabViewItem:(NSTabViewItem*)tabViewItem { |
506 NSTreeController* treeController = nil; | 491 NSTreeController* treeController = nil; |
507 switch ([tabView indexOfTabViewItem:tabViewItem]) { | 492 switch ([tabView indexOfTabViewItem:tabViewItem]) { |
508 case kAllowedCookiesTabIndex: | 493 case kAllowedCookiesTabIndex: |
509 treeController = allowedTreeController_; | 494 treeController = allowedTreeController_; |
510 break; | 495 break; |
511 case kBlockedCookiesTabIndex: | 496 case kBlockedCookiesTabIndex: |
512 treeController = blockedTreeController_; | 497 treeController = blockedTreeController_; |
513 break; | 498 break; |
514 default: | 499 default: |
515 NOTREACHED(); | 500 NOTREACHED(); |
516 return; | 501 return; |
517 } | 502 } |
518 [detailsViewController_ configureBindingsForTreeController:treeController]; | 503 [detailsViewController_ configureBindingsForTreeController:treeController]; |
519 } | 504 } |
520 | 505 |
521 @end | 506 @end |
OLD | NEW |