OLD | NEW |
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 #include "chrome/browser/ui/webui/constrained_html_ui.h" | 5 #include "chrome/browser/ui/webui/constrained_html_ui.h" |
6 | 6 |
7 #include "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
8 #include "chrome/browser/ui/gtk/constrained_window_gtk.h" | 8 #include "chrome/browser/ui/gtk/constrained_window_gtk.h" |
9 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 9 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
10 #include "chrome/browser/ui/views/tab_contents/tab_contents_container.h" | 10 #include "chrome/browser/ui/views/tab_contents/tab_contents_container.h" |
11 #include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h" | 11 #include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h" |
12 #include "chrome/browser/ui/webui/html_dialog_ui.h" | 12 #include "chrome/browser/ui/webui/html_dialog_ui.h" |
13 #include "content/browser/tab_contents/tab_contents.h" | 13 #include "content/browser/tab_contents/tab_contents.h" |
14 #include "ui/base/gtk/gtk_hig_constants.h" | 14 #include "ui/base/gtk/gtk_hig_constants.h" |
15 #include "ui/gfx/rect.h" | 15 #include "ui/gfx/rect.h" |
16 #include "views/widget/native_widget_gtk.h" | 16 #include "views/widget/native_widget_gtk.h" |
17 | 17 |
18 // ConstrainedHtmlDelegateGtk works with ConstrainedWindowGtk to present | 18 // ConstrainedHtmlDelegateGtk works with ConstrainedWindowGtk to present |
19 // a TabContents in a ContraintedHtmlUI. | 19 // a TabContents in a ContraintedHtmlUI. |
20 class ConstrainedHtmlDelegateGtk : public views::NativeWidgetGtk, | 20 class ConstrainedHtmlDelegateGtk : public views::NativeWidgetGtk, |
21 public ConstrainedHtmlUIDelegate, | 21 public ConstrainedHtmlUIDelegate, |
22 public ConstrainedWindowGtkDelegate, | 22 public ConstrainedWindowGtkDelegate, |
23 public HtmlDialogTabContentsDelegate { | 23 public HtmlDialogTabContentsDelegate { |
24 public: | 24 public: |
25 ConstrainedHtmlDelegateGtk(Profile* profile, | 25 ConstrainedHtmlDelegateGtk(Profile* profile, |
26 HtmlDialogUIDelegate* delegate); | 26 HtmlDialogUIDelegate* delegate); |
27 ~ConstrainedHtmlDelegateGtk(); | 27 ~ConstrainedHtmlDelegateGtk(); |
28 | 28 |
| 29 TabContentsWrapper* tab() { |
| 30 return html_tab_contents_.get(); |
| 31 } |
| 32 |
29 // ConstrainedHtmlUIDelegate interface. | 33 // ConstrainedHtmlUIDelegate interface. |
30 virtual HtmlDialogUIDelegate* GetHtmlDialogUIDelegate() OVERRIDE; | 34 virtual HtmlDialogUIDelegate* GetHtmlDialogUIDelegate() OVERRIDE; |
31 virtual void OnDialogCloseFromWebUI() OVERRIDE; | 35 virtual void OnDialogCloseFromWebUI() OVERRIDE; |
32 virtual bool GetBackgroundColor(GdkColor* color) OVERRIDE { | 36 virtual void ReleaseTabContentsOnDialogClose() OVERRIDE { |
33 *color = ui::kGdkWhite; | 37 release_tab_on_close_ = true; |
34 return true; | |
35 } | 38 } |
36 | 39 |
37 // ConstrainedWindowGtkDelegate implementation. | 40 // ConstrainedWindowGtkDelegate implementation. |
38 virtual GtkWidget* GetWidgetRoot() OVERRIDE { | 41 virtual GtkWidget* GetWidgetRoot() OVERRIDE { |
39 return GetNativeView(); | 42 return GetNativeView(); |
40 } | 43 } |
41 virtual GtkWidget* GetFocusWidget() OVERRIDE { | 44 virtual GtkWidget* GetFocusWidget() OVERRIDE { |
42 return html_tab_contents_.GetContentNativeView(); | 45 return html_tab_contents_->tab_contents()->GetContentNativeView(); |
43 } | 46 } |
44 virtual void DeleteDelegate() OVERRIDE { | 47 virtual void DeleteDelegate() OVERRIDE { |
45 if (!closed_via_webui_) | 48 if (!closed_via_webui_) |
46 html_delegate_->OnDialogClosed(""); | 49 html_delegate_->OnDialogClosed(""); |
47 tab_container_->ChangeTabContents(NULL); | 50 tab_container_->ChangeTabContents(NULL); |
48 } | 51 } |
| 52 virtual bool GetBackgroundColor(GdkColor* color) OVERRIDE { |
| 53 *color = ui::kGdkWhite; |
| 54 return true; |
| 55 } |
49 virtual bool ShouldHaveBorderPadding() const OVERRIDE { | 56 virtual bool ShouldHaveBorderPadding() const OVERRIDE { |
50 return false; | 57 return false; |
51 } | 58 } |
52 | 59 |
53 // HtmlDialogTabContentsDelegate interface. | 60 // HtmlDialogTabContentsDelegate interface. |
54 void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) OVERRIDE {} | 61 void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) OVERRIDE {} |
55 | 62 |
56 void set_window(ConstrainedWindow* window) { | 63 void set_window(ConstrainedWindow* window) { |
57 window_ = window; | 64 window_ = window; |
58 } | 65 } |
59 | 66 |
60 private: | 67 private: |
61 TabContents html_tab_contents_; | 68 scoped_ptr<TabContentsWrapper> html_tab_contents_; |
62 TabContentsContainer* tab_container_; | 69 TabContentsContainer* tab_container_; |
63 | 70 |
64 HtmlDialogUIDelegate* html_delegate_; | 71 HtmlDialogUIDelegate* html_delegate_; |
65 | 72 |
66 // The constrained window that owns |this|. Saved so we can close it later. | 73 // The constrained window that owns |this|. Saved so we can close it later. |
67 ConstrainedWindow* window_; | 74 ConstrainedWindow* window_; |
68 | 75 |
69 // Was the dialog closed from WebUI (in which case |html_delegate_|'s | 76 // Was the dialog closed from WebUI (in which case |html_delegate_|'s |
70 // OnDialogClosed() method has already been called)? | 77 // OnDialogClosed() method has already been called)? |
71 bool closed_via_webui_; | 78 bool closed_via_webui_; |
| 79 |
| 80 // If true, release |tab_| on close instead of destroying it. |
| 81 bool release_tab_on_close_; |
72 }; | 82 }; |
73 | 83 |
74 ConstrainedHtmlDelegateGtk::ConstrainedHtmlDelegateGtk( | 84 ConstrainedHtmlDelegateGtk::ConstrainedHtmlDelegateGtk( |
75 Profile* profile, | 85 Profile* profile, |
76 HtmlDialogUIDelegate* delegate) | 86 HtmlDialogUIDelegate* delegate) |
77 : views::NativeWidgetGtk(new views::Widget), | 87 : views::NativeWidgetGtk(new views::Widget), |
78 HtmlDialogTabContentsDelegate(profile), | 88 HtmlDialogTabContentsDelegate(profile), |
79 html_tab_contents_(profile, NULL, MSG_ROUTING_NONE, NULL, NULL), | |
80 tab_container_(NULL), | 89 tab_container_(NULL), |
81 html_delegate_(delegate), | 90 html_delegate_(delegate), |
82 window_(NULL), | 91 window_(NULL), |
83 closed_via_webui_(false) { | 92 closed_via_webui_(false) { |
84 CHECK(delegate); | 93 CHECK(delegate); |
85 html_tab_contents_.set_delegate(this); | 94 TabContents* tab_contents = |
| 95 new TabContents(profile, NULL, MSG_ROUTING_NONE, NULL, NULL); |
| 96 html_tab_contents_.reset(new TabContentsWrapper(tab_contents)); |
| 97 tab_contents->set_delegate(this); |
86 | 98 |
87 // Set |this| as a property so the ConstrainedHtmlUI can retrieve it. | 99 // Set |this| as a property so the ConstrainedHtmlUI can retrieve it. |
88 ConstrainedHtmlUI::GetPropertyAccessor().SetProperty( | 100 ConstrainedHtmlUI::GetPropertyAccessor().SetProperty( |
89 html_tab_contents_.property_bag(), this); | 101 tab_contents->property_bag(), this); |
90 html_tab_contents_.controller().LoadURL(delegate->GetDialogContentURL(), | 102 tab_contents->controller().LoadURL(delegate->GetDialogContentURL(), GURL(), |
91 GURL(), | 103 PageTransition::START_PAGE, std::string()); |
92 PageTransition::START_PAGE, | |
93 std::string()); | |
94 | 104 |
95 views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); | 105 views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); |
96 params.native_widget = this; | 106 params.native_widget = this; |
97 GetWidget()->Init(params); | 107 GetWidget()->Init(params); |
98 | 108 |
99 tab_container_ = new TabContentsContainer; | 109 tab_container_ = new TabContentsContainer; |
100 GetWidget()->SetContentsView(tab_container_); | 110 GetWidget()->SetContentsView(tab_container_); |
101 tab_container_->ChangeTabContents(&html_tab_contents_); | 111 tab_container_->ChangeTabContents(html_tab_contents_->tab_contents()); |
102 | 112 |
103 gfx::Size dialog_size; | 113 gfx::Size dialog_size; |
104 html_delegate_->GetDialogSize(&dialog_size); | 114 html_delegate_->GetDialogSize(&dialog_size); |
105 gtk_widget_set_size_request(GetWidgetRoot(), | 115 gtk_widget_set_size_request(GetWidgetRoot(), |
106 dialog_size.width(), | 116 dialog_size.width(), |
107 dialog_size.height()); | 117 dialog_size.height()); |
108 } | 118 } |
109 | 119 |
110 ConstrainedHtmlDelegateGtk::~ConstrainedHtmlDelegateGtk() { | 120 ConstrainedHtmlDelegateGtk::~ConstrainedHtmlDelegateGtk() { |
111 } | 121 } |
(...skipping 12 matching lines...) Expand all Loading... |
124 Profile* profile, | 134 Profile* profile, |
125 HtmlDialogUIDelegate* delegate, | 135 HtmlDialogUIDelegate* delegate, |
126 TabContentsWrapper* wrapper) { | 136 TabContentsWrapper* wrapper) { |
127 ConstrainedHtmlDelegateGtk* constrained_delegate = | 137 ConstrainedHtmlDelegateGtk* constrained_delegate = |
128 new ConstrainedHtmlDelegateGtk(profile, delegate); | 138 new ConstrainedHtmlDelegateGtk(profile, delegate); |
129 ConstrainedWindow* constrained_window = | 139 ConstrainedWindow* constrained_window = |
130 new ConstrainedWindowGtk(wrapper, constrained_delegate); | 140 new ConstrainedWindowGtk(wrapper, constrained_delegate); |
131 constrained_delegate->set_window(constrained_window); | 141 constrained_delegate->set_window(constrained_window); |
132 return constrained_window; | 142 return constrained_window; |
133 } | 143 } |
| 144 |
| 145 // static |
| 146 TabContentsWrapper* ConstrainedHtmlUI::CreateConstrainedPrintPreviewHtmlUI( |
| 147 Profile* profile, |
| 148 HtmlDialogUIDelegate* delegate, |
| 149 TabContentsWrapper* wrapper) { |
| 150 ConstrainedHtmlDelegateGtk* constrained_delegate = |
| 151 new ConstrainedHtmlDelegateGtk(profile, delegate); |
| 152 ConstrainedWindow* constrained_window = |
| 153 new ConstrainedWindowGtk(wrapper, constrained_delegate); |
| 154 constrained_delegate->set_window(constrained_window); |
| 155 return constrained_delegate->tab(); |
| 156 } |
OLD | NEW |