1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file.
4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/gtk/infobars/link_infobar_gtk.h"
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/link_infobar_delegate.h"
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/gtk/gtk_util.h"
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// LinkInfoBarDelegate ---------------------------------------------------------
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
12dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenInfoBar* LinkInfoBarDelegate::CreateInfoBar() {
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  return new LinkInfoBarGtk(this);
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// LinkInfoBarGtk --------------------------------------------------------------
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
18dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenLinkInfoBarGtk::LinkInfoBarGtk(LinkInfoBarDelegate* delegate)
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    : InfoBar(delegate) {
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  size_t link_offset;
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  string16 display_text = delegate->GetMessageTextWithOffset(&link_offset);
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  string16 link_text = delegate->GetLinkText();
23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AddLabelWithInlineLink(display_text, link_text, link_offset,
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                         G_CALLBACK(OnLinkClickedThunk));
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
27dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenLinkInfoBarGtk::~LinkInfoBarGtk() {
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid LinkInfoBarGtk::OnLinkClicked(GtkWidget* button) {
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  if (GetDelegate()->LinkClicked(
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen        gtk_util::DispositionForCurrentButtonPressEvent())) {
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    RemoveInfoBar();
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
37dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenLinkInfoBarDelegate* LinkInfoBarGtk::GetDelegate() {
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  return delegate_->AsLinkInfoBarDelegate();
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
40