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

Side by Side Diff: chrome/browser/ui/cocoa/infobars/infobar_controller.mm

Issue 7461134: [Mac] Unspoofable infobars v3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 4 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "base/logging.h" // for NOTREACHED() 7 #include "base/logging.h" // for NOTREACHED()
8 #include "base/mac/mac_util.h" 8 #include "base/mac/mac_util.h"
9 #include "base/sys_string_conversions.h" 9 #include "base/sys_string_conversions.h"
10 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h" 10 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
11 #include "chrome/browser/tab_contents/link_infobar_delegate.h" 11 #include "chrome/browser/tab_contents/link_infobar_delegate.h"
12 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 12 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
13 #import "chrome/browser/ui/cocoa/animatable_view.h" 13 #import "chrome/browser/ui/cocoa/animatable_view.h"
14 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
14 #include "chrome/browser/ui/cocoa/event_utils.h" 15 #include "chrome/browser/ui/cocoa/event_utils.h"
15 #include "chrome/browser/ui/cocoa/infobars/infobar.h" 16 #include "chrome/browser/ui/cocoa/infobars/infobar.h"
16 #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h" 17 #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"
17 #import "chrome/browser/ui/cocoa/infobars/infobar_controller.h" 18 #import "chrome/browser/ui/cocoa/infobars/infobar_controller.h"
18 #import "chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h" 19 #import "chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h"
20 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
19 #include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" 21 #include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h"
20 #include "ui/gfx/image/image.h" 22 #include "ui/gfx/image/image.h"
21 #include "webkit/glue/window_open_disposition.h" 23 #include "webkit/glue/window_open_disposition.h"
22 24
23 namespace { 25 namespace {
24 // Durations set to match the default SlideAnimation duration. 26 // Durations set to match the default SlideAnimation duration.
25 const float kAnimateOpenDuration = 0.12; 27 const float kAnimateOpenDuration = 0.12;
26 const float kAnimateCloseDuration = 0.12; 28 const float kAnimateCloseDuration = 0.12;
27 } 29 }
28 30
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 // Performs final cleanup after an animation is finished or stopped, including 89 // Performs final cleanup after an animation is finished or stopped, including
88 // notifying the InfoBarDelegate that the infobar was closed and removing the 90 // notifying the InfoBarDelegate that the infobar was closed and removing the
89 // infobar from its container, if necessary. 91 // infobar from its container, if necessary.
90 - (void)cleanUpAfterAnimation:(BOOL)finished; 92 - (void)cleanUpAfterAnimation:(BOOL)finished;
91 93
92 // Sets the info bar message to the specified |message|, with a hypertext 94 // Sets the info bar message to the specified |message|, with a hypertext
93 // style link. |link| will be inserted into message at |linkOffset|. 95 // style link. |link| will be inserted into message at |linkOffset|.
94 - (void)setLabelToMessage:(NSString*)message 96 - (void)setLabelToMessage:(NSString*)message
95 withLink:(NSString*)link 97 withLink:(NSString*)link
96 atOffset:(NSUInteger)linkOffset; 98 atOffset:(NSUInteger)linkOffset;
99
100 // Returns the point, in gradient view coordinates, at which the apex of the
101 // infobar tip should be drawn.
102 - (NSPoint)pointForTipApex;
97 @end 103 @end
98 104
99 @implementation InfoBarController 105 @implementation InfoBarController
100 106
101 @synthesize containerController = containerController_; 107 @synthesize containerController = containerController_;
102 @synthesize delegate = delegate_; 108 @synthesize delegate = delegate_;
103 109
104 - (id)initWithDelegate:(InfoBarDelegate*)delegate 110 - (id)initWithDelegate:(InfoBarDelegate*)delegate
105 owner:(TabContentsWrapper*)owner { 111 owner:(TabContentsWrapper*)owner {
106 DCHECK(delegate); 112 DCHECK(delegate);
(...skipping 18 matching lines...) Expand all
125 NSRect labelFrame = [labelPlaceholder_ frame]; 131 NSRect labelFrame = [labelPlaceholder_ frame];
126 labelFrame.size.width += NSMinX(imageFrame) - NSMinX(labelFrame); 132 labelFrame.size.width += NSMinX(imageFrame) - NSMinX(labelFrame);
127 labelFrame.origin.x = imageFrame.origin.x; 133 labelFrame.origin.x = imageFrame.origin.x;
128 [image_ removeFromSuperview]; 134 [image_ removeFromSuperview];
129 [labelPlaceholder_ setFrame:labelFrame]; 135 [labelPlaceholder_ setFrame:labelFrame];
130 } 136 }
131 [self initializeLabel]; 137 [self initializeLabel];
132 138
133 [self addAdditionalControls]; 139 [self addAdditionalControls];
134 140
141 infoBarView_.tipApex = [self pointForTipApex];
135 [infoBarView_ setInfobarType:delegate_->GetInfoBarType()]; 142 [infoBarView_ setInfobarType:delegate_->GetInfoBarType()];
136 } 143 }
137 144
138 // Called when someone clicks on the embedded link. 145 // Called when someone clicks on the embedded link.
139 - (BOOL) textView:(NSTextView*)textView 146 - (BOOL) textView:(NSTextView*)textView
140 clickedOnLink:(id)link 147 clickedOnLink:(id)link
141 atIndex:(NSUInteger)charIndex { 148 atIndex:(NSUInteger)charIndex {
142 if ([self respondsToSelector:@selector(linkClicked)]) 149 if ([self respondsToSelector:@selector(linkClicked)])
143 [self performSelector:@selector(linkClicked)]; 150 [self performSelector:@selector(linkClicked)];
144 return YES; 151 return YES;
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 // Insert the link text into the string at the appropriate offset. 353 // Insert the link text into the string at the appropriate offset.
347 scoped_nsobject<NSAttributedString> attributedString( 354 scoped_nsobject<NSAttributedString> attributedString(
348 [[NSAttributedString alloc] initWithString:link 355 [[NSAttributedString alloc] initWithString:link
349 attributes:linkAttributes]); 356 attributes:linkAttributes]);
350 [infoText.get() insertAttributedString:attributedString.get() 357 [infoText.get() insertAttributedString:attributedString.get()
351 atIndex:linkOffset]; 358 atIndex:linkOffset];
352 // Update the label view with the new text. 359 // Update the label view with the new text.
353 [[label_.get() textStorage] setAttributedString:infoText]; 360 [[label_.get() textStorage] setAttributedString:infoText];
354 } 361 }
355 362
363 - (NSPoint)pointForTipApex {
364 BrowserWindowController* windowController =
365 [containerController_ browserWindowController];
366 if (!windowController) {
367 // This should only happen in unit tests.
368 return NSZeroPoint;
369 }
370
371 LocationBarViewMac* locationBar = [windowController locationBarBridge];
372 NSPoint point = locationBar->GetPageInfoBubblePoint();
373 point = [infoBarView_ convertPoint:point fromView:nil];
374 return point;
375 }
376
356 @end 377 @end
357 378
358 379
359 ///////////////////////////////////////////////////////////////////////// 380 /////////////////////////////////////////////////////////////////////////
360 // LinkInfoBarController implementation 381 // LinkInfoBarController implementation
361 382
362 @implementation LinkInfoBarController 383 @implementation LinkInfoBarController
363 384
364 // Link infobars have a text message, of which part is linkified. We 385 // Link infobars have a text message, of which part is linkified. We
365 // use an NSAttributedString to display styled text, and we set a 386 // use an NSAttributedString to display styled text, and we set a
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 LinkInfoBarController* controller = 553 LinkInfoBarController* controller =
533 [[LinkInfoBarController alloc] initWithDelegate:this owner:owner]; 554 [[LinkInfoBarController alloc] initWithDelegate:this owner:owner];
534 return new InfoBar(controller, this); 555 return new InfoBar(controller, this);
535 } 556 }
536 557
537 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar(TabContentsWrapper* owner) { 558 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar(TabContentsWrapper* owner) {
538 ConfirmInfoBarController* controller = 559 ConfirmInfoBarController* controller =
539 [[ConfirmInfoBarController alloc] initWithDelegate:this owner:owner]; 560 [[ConfirmInfoBarController alloc] initWithDelegate:this owner:owner];
540 return new InfoBar(controller, this); 561 return new InfoBar(controller, this);
541 } 562 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698