| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/tab_contents/web_contents_view_mac.h" | 5 #include "chrome/browser/tab_contents/web_contents_view_mac.h" |
| 6 | 6 |
| 7 #include "chrome/browser/browser.h" // TODO(beng): this dependency is awful. | 7 #include "chrome/browser/browser.h" // TODO(beng): this dependency is awful. |
| 8 #include "chrome/browser/cocoa/sad_tab_view.h" | 8 #include "chrome/browser/cocoa/sad_tab_view.h" |
| 9 #include "chrome/browser/renderer_host/render_widget_host.h" | 9 #include "chrome/browser/renderer_host/render_widget_host.h" |
| 10 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" | 10 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 : WebContentsView(web_contents) { | 27 : WebContentsView(web_contents) { |
| 28 registrar_.Add(this, NotificationType::WEB_CONTENTS_CONNECTED, | 28 registrar_.Add(this, NotificationType::WEB_CONTENTS_CONNECTED, |
| 29 Source<WebContents>(web_contents)); | 29 Source<WebContents>(web_contents)); |
| 30 registrar_.Add(this, NotificationType::WEB_CONTENTS_DISCONNECTED, | 30 registrar_.Add(this, NotificationType::WEB_CONTENTS_DISCONNECTED, |
| 31 Source<WebContents>(web_contents)); | 31 Source<WebContents>(web_contents)); |
| 32 } | 32 } |
| 33 | 33 |
| 34 WebContentsViewMac::~WebContentsViewMac() { | 34 WebContentsViewMac::~WebContentsViewMac() { |
| 35 } | 35 } |
| 36 | 36 |
| 37 WebContents* WebContentsViewMac::GetWebContents() { | |
| 38 return web_contents_; | |
| 39 } | |
| 40 | |
| 41 void WebContentsViewMac::CreateView() { | 37 void WebContentsViewMac::CreateView() { |
| 42 WebContentsViewCocoa* view = | 38 WebContentsViewCocoa* view = |
| 43 [[WebContentsViewCocoa alloc] initWithWebContentsViewMac:this]; | 39 [[WebContentsViewCocoa alloc] initWithWebContentsViewMac:this]; |
| 44 cocoa_view_.reset(view); | 40 cocoa_view_.reset(view); |
| 45 } | 41 } |
| 46 | 42 |
| 47 RenderWidgetHostView* WebContentsViewMac::CreateViewForWidget( | 43 RenderWidgetHostView* WebContentsViewMac::CreateViewForWidget( |
| 48 RenderWidgetHost* render_widget_host) { | 44 RenderWidgetHost* render_widget_host) { |
| 49 DCHECK(!render_widget_host->view()); | 45 DCHECK(!render_widget_host->view()); |
| 50 RenderWidgetHostViewMac* view = | 46 RenderWidgetHostViewMac* view = |
| 51 new RenderWidgetHostViewMac(render_widget_host); | 47 new RenderWidgetHostViewMac(render_widget_host); |
| 52 | 48 |
| 53 // Fancy layout comes later; for now just make it our size and resize it | 49 // Fancy layout comes later; for now just make it our size and resize it |
| 54 // with us. | 50 // with us. |
| 55 NSView* view_view = view->native_view(); | 51 NSView* view_view = view->native_view(); |
| 56 [cocoa_view_.get() addSubview:view_view]; | 52 [cocoa_view_.get() addSubview:view_view]; |
| 57 [view_view setFrame:[cocoa_view_.get() bounds]]; | 53 [view_view setFrame:[cocoa_view_.get() bounds]]; |
| 58 [view_view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; | 54 [view_view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; |
| 59 | 55 |
| 60 return view; | 56 return view; |
| 61 } | 57 } |
| 62 | 58 |
| 63 gfx::NativeView WebContentsViewMac::GetNativeView() const { | 59 gfx::NativeView WebContentsViewMac::GetNativeView() const { |
| 64 return cocoa_view_.get(); | 60 return cocoa_view_.get(); |
| 65 } | 61 } |
| 66 | 62 |
| 67 gfx::NativeView WebContentsViewMac::GetContentNativeView() const { | 63 gfx::NativeView WebContentsViewMac::GetContentNativeView() const { |
| 68 if (!web_contents_->render_widget_host_view()) | 64 if (!web_contents()->render_widget_host_view()) |
| 69 return NULL; | 65 return NULL; |
| 70 return web_contents_->render_widget_host_view()->GetPluginNativeView(); | 66 return web_contents()->render_widget_host_view()->GetPluginNativeView(); |
| 71 } | 67 } |
| 72 | 68 |
| 73 gfx::NativeWindow WebContentsViewMac::GetTopLevelNativeWindow() const { | 69 gfx::NativeWindow WebContentsViewMac::GetTopLevelNativeWindow() const { |
| 74 return [cocoa_view_.get() window]; | 70 return [cocoa_view_.get() window]; |
| 75 } | 71 } |
| 76 | 72 |
| 77 void WebContentsViewMac::GetContainerBounds(gfx::Rect* out) const { | 73 void WebContentsViewMac::GetContainerBounds(gfx::Rect* out) const { |
| 78 *out = [cocoa_view_.get() NSRectToRect:[cocoa_view_.get() bounds]]; | 74 *out = [cocoa_view_.get() NSRectToRect:[cocoa_view_.get() bounds]]; |
| 79 } | 75 } |
| 80 | 76 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 const gfx::Rect& selection_rect, | 166 const gfx::Rect& selection_rect, |
| 171 int active_match_ordinal, | 167 int active_match_ordinal, |
| 172 bool final_update) { | 168 bool final_update) { |
| 173 if (find_bar_.get()) { | 169 if (find_bar_.get()) { |
| 174 find_bar_->OnFindReply(request_id, number_of_matches, selection_rect, | 170 find_bar_->OnFindReply(request_id, number_of_matches, selection_rect, |
| 175 active_match_ordinal, final_update); | 171 active_match_ordinal, final_update); |
| 176 } | 172 } |
| 177 } | 173 } |
| 178 | 174 |
| 179 void WebContentsViewMac::ShowContextMenu(const ContextMenuParams& params) { | 175 void WebContentsViewMac::ShowContextMenu(const ContextMenuParams& params) { |
| 180 RenderViewContextMenuMac menu(web_contents_, | 176 RenderViewContextMenuMac menu(web_contents(), |
| 181 params, | 177 params, |
| 182 GetNativeView()); | 178 GetNativeView()); |
| 183 } | 179 } |
| 184 | 180 |
| 185 WebContents* WebContentsViewMac::CreateNewWindowInternal( | 181 WebContents* WebContentsViewMac::CreateNewWindowInternal( |
| 186 int route_id, | 182 int route_id, |
| 187 base::WaitableEvent* modal_dialog_event) { | 183 base::WaitableEvent* modal_dialog_event) { |
| 188 // Create the new web contents. This will automatically create the new | 184 // Create the new web contents. This will automatically create the new |
| 189 // WebContentsView. In the future, we may want to create the view separately. | 185 // WebContentsView. In the future, we may want to create the view separately. |
| 190 WebContents* new_contents = | 186 WebContents* new_contents = |
| 191 new WebContents(web_contents_->profile(), | 187 new WebContents(web_contents()->profile(), |
| 192 web_contents_->GetSiteInstance(), | 188 web_contents()->GetSiteInstance(), |
| 193 web_contents_->render_view_factory_, | 189 web_contents()->render_view_factory_, |
| 194 route_id, | 190 route_id, |
| 195 modal_dialog_event); | 191 modal_dialog_event); |
| 196 new_contents->SetupController(web_contents_->profile()); | 192 new_contents->SetupController(web_contents()->profile()); |
| 197 WebContentsView* new_view = new_contents->view(); | 193 WebContentsView* new_view = new_contents->view(); |
| 198 | 194 |
| 199 new_view->CreateView(); | 195 new_view->CreateView(); |
| 200 | 196 |
| 201 // TODO(brettw) it seems bogus that we have to call this function on the | 197 // TODO(brettw) it seems bogus that we have to call this function on the |
| 202 // newly created object and give it one of its own member variables. | 198 // newly created object and give it one of its own member variables. |
| 203 new_view->CreateViewForWidget(new_contents->render_view_host()); | 199 new_view->CreateViewForWidget(new_contents->render_view_host()); |
| 204 return new_contents; | 200 return new_contents; |
| 205 } | 201 } |
| 206 | 202 |
| 207 void WebContentsViewMac::ShowCreatedWindowInternal( | 203 void WebContentsViewMac::ShowCreatedWindowInternal( |
| 208 WebContents* new_web_contents, | 204 WebContents* new_web_contents, |
| 209 WindowOpenDisposition disposition, | 205 WindowOpenDisposition disposition, |
| 210 const gfx::Rect& initial_pos, | 206 const gfx::Rect& initial_pos, |
| 211 bool user_gesture) { | 207 bool user_gesture) { |
| 212 if (!new_web_contents->render_widget_host_view() || | 208 if (!new_web_contents->render_widget_host_view() || |
| 213 !new_web_contents->process()->channel()) { | 209 !new_web_contents->process()->channel()) { |
| 214 // The view has gone away or the renderer crashed. Nothing to do. | 210 // The view has gone away or the renderer crashed. Nothing to do. |
| 215 return; | 211 return; |
| 216 } | 212 } |
| 217 | 213 |
| 218 // TODO(brettw) this seems bogus to reach into here and initialize the host. | 214 // TODO(brettw) this seems bogus to reach into here and initialize the host. |
| 219 new_web_contents->render_view_host()->Init(); | 215 new_web_contents->render_view_host()->Init(); |
| 220 web_contents_->AddNewContents(new_web_contents, disposition, initial_pos, | 216 web_contents()->AddNewContents(new_web_contents, disposition, initial_pos, |
| 221 user_gesture); | 217 user_gesture); |
| 222 } | 218 } |
| 223 | 219 |
| 224 void WebContentsViewMac::Observe(NotificationType type, | 220 void WebContentsViewMac::Observe(NotificationType type, |
| 225 const NotificationSource& source, | 221 const NotificationSource& source, |
| 226 const NotificationDetails& details) { | 222 const NotificationDetails& details) { |
| 227 switch (type.value) { | 223 switch (type.value) { |
| 228 case NotificationType::WEB_CONTENTS_CONNECTED: { | 224 case NotificationType::WEB_CONTENTS_CONNECTED: { |
| 229 if (sad_tab_.get()) { | 225 if (sad_tab_.get()) { |
| 230 [sad_tab_.get() removeFromSuperview]; | 226 [sad_tab_.get() removeFromSuperview]; |
| 231 sad_tab_.reset(); | 227 sad_tab_.reset(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 258 } | 254 } |
| 259 | 255 |
| 260 - (void)processKeyboardEvent:(NSEvent*)event { | 256 - (void)processKeyboardEvent:(NSEvent*)event { |
| 261 if ([event type] == NSKeyDown) | 257 if ([event type] == NSKeyDown) |
| 262 [super keyDown:event]; | 258 [super keyDown:event]; |
| 263 else if ([event type] == NSKeyUp) | 259 else if ([event type] == NSKeyUp) |
| 264 [super keyUp:event]; | 260 [super keyUp:event]; |
| 265 } | 261 } |
| 266 | 262 |
| 267 - (void)mouseEvent:(NSEvent *)theEvent { | 263 - (void)mouseEvent:(NSEvent *)theEvent { |
| 268 if (webContentsView_->GetWebContents()->delegate()) { | 264 if (webContentsView_->web_contents()->delegate()) { |
| 269 if ([theEvent type] == NSMouseMoved) | 265 if ([theEvent type] == NSMouseMoved) |
| 270 webContentsView_->GetWebContents()->delegate()-> | 266 webContentsView_->web_contents()->delegate()-> |
| 271 ContentsMouseEvent(webContentsView_->GetWebContents(), true); | 267 ContentsMouseEvent(webContentsView_->web_contents(), true); |
| 272 if ([theEvent type] == NSMouseExited) | 268 if ([theEvent type] == NSMouseExited) |
| 273 webContentsView_->GetWebContents()->delegate()-> | 269 webContentsView_->web_contents()->delegate()-> |
| 274 ContentsMouseEvent(webContentsView_->GetWebContents(), false); | 270 ContentsMouseEvent(webContentsView_->web_contents(), false); |
| 275 } | 271 } |
| 276 } | 272 } |
| 277 | 273 |
| 278 // In the Windows version, we always have cut/copy/paste enabled. This is sub- | 274 // In the Windows version, we always have cut/copy/paste enabled. This is sub- |
| 279 // optimal, but we do it too. TODO(avi): Plumb the "can*" methods up from | 275 // optimal, but we do it too. TODO(avi): Plumb the "can*" methods up from |
| 280 // WebCore. | 276 // WebCore. |
| 281 | 277 |
| 282 - (void)cut:(id)sender { | 278 - (void)cut:(id)sender { |
| 283 webContentsView_->GetWebContents()->Cut(); | 279 webContentsView_->web_contents()->Cut(); |
| 284 } | 280 } |
| 285 | 281 |
| 286 - (void)copy:(id)sender { | 282 - (void)copy:(id)sender { |
| 287 webContentsView_->GetWebContents()->Copy(); | 283 webContentsView_->web_contents()->Copy(); |
| 288 } | 284 } |
| 289 | 285 |
| 290 - (void)paste:(id)sender { | 286 - (void)paste:(id)sender { |
| 291 webContentsView_->GetWebContents()->Paste(); | 287 webContentsView_->web_contents()->Paste(); |
| 292 } | 288 } |
| 293 | 289 |
| 294 // Tons of stuff goes here, where we grab events going on in Cocoaland and send | 290 // Tons of stuff goes here, where we grab events going on in Cocoaland and send |
| 295 // them into the C++ system. TODO(avi): all that jazz | 291 // them into the C++ system. TODO(avi): all that jazz |
| 296 | 292 |
| 297 @end | 293 @end |
| OLD | NEW |