Index: chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm |
diff --git a/chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..533e8a4ca574bb51fe64d350db8b056bfe51c321 |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm |
@@ -0,0 +1,62 @@ |
+// Copyright 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import "chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.h" |
+ |
+#include "base/logging.h" |
+#include "base/sys_string_conversions.h" |
+#include "chrome/browser/infobars/alternate_nav_infobar_delegate.h" |
+#import "chrome/browser/ui/cocoa/hyperlink_text_view.h" |
+#include "chrome/browser/ui/cocoa/event_utils.h" |
+#include "chrome/browser/ui/cocoa/infobars/infobar.h" |
+#include "webkit/glue/window_open_disposition.h" |
+ |
+@implementation AlternateNavInfoBarController |
+ |
+// Link infobars have a text message, of which part is linkified. We |
+// use an NSAttributedString to display styled text, and we set a |
+// NSLink attribute on the hyperlink portion of the message. Infobars |
+// use a custom NSTextField subclass, which allows us to override |
+// textView:clickedOnLink:atIndex: and intercept clicks. |
+// |
+- (void)addAdditionalControls { |
+ // No buttons. |
+ [self removeButtons]; |
+ |
+ AlternateNavInfoBarDelegate* delegate = |
+ delegate_->AsAlternateNavInfoBarDelegate(); |
+ DCHECK(delegate); |
+ size_t offset = string16::npos; |
+ string16 message = delegate->GetMessageTextWithOffset(&offset); |
+ string16 link = delegate->GetLinkText(); |
+ NSFont* font = [NSFont labelFontOfSize: |
+ [NSFont systemFontSizeForControlSize:NSRegularControlSize]]; |
+ HyperlinkTextView* view = (HyperlinkTextView*)label_.get(); |
+ [view setMessageAndLink:base::SysUTF16ToNSString(message) |
+ withLink:base::SysUTF16ToNSString(link) |
+ atOffset:offset |
+ font:font |
+ messageColor:[NSColor blackColor] |
+ linkColor:[NSColor blueColor]]; |
+} |
+ |
+// Called when someone clicks on the link in the infobar. This method |
+// is called by the InfobarTextField on its delegate (the |
+// AlternateNavInfoBarController). |
+- (void)linkClicked { |
+ if (![self isOwned]) |
+ return; |
+ WindowOpenDisposition disposition = |
+ event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); |
+ if (delegate_->AsAlternateNavInfoBarDelegate()->LinkClicked(disposition)) |
+ [self removeSelf]; |
+} |
+ |
+@end |
+ |
+InfoBar* AlternateNavInfoBarDelegate::CreateInfoBar(InfoBarService* owner) { |
+ AlternateNavInfoBarController* controller = |
+ [[AlternateNavInfoBarController alloc] initWithDelegate:this owner:owner]; |
+ return new InfoBar(controller, this); |
+} |