| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ | 5 #ifndef CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ |
| 6 #define CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ | 6 #define CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ |
| 7 | 7 |
| 8 #include <atlbase.h> | 8 #include <atlbase.h> |
| 9 #include <atlcom.h> | 9 #include <atlcom.h> |
| 10 #include <atlctl.h> | 10 #include <atlctl.h> |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 doc_site_.QueryFrom(client_site); | 342 doc_site_.QueryFrom(client_site); |
| 343 } | 343 } |
| 344 | 344 |
| 345 if (client_site == NULL) { | 345 if (client_site == NULL) { |
| 346 in_place_frame_.Release(); | 346 in_place_frame_.Release(); |
| 347 } | 347 } |
| 348 | 348 |
| 349 return CComControlBase::IOleObject_SetClientSite(client_site); | 349 return CComControlBase::IOleObject_SetClientSite(client_site); |
| 350 } | 350 } |
| 351 | 351 |
| 352 bool HandleContextMenuCommand(UINT cmd, | 352 bool HandleContextMenuCommand(UINT cmd, const MiniContextMenuParams& params) { |
| 353 const IPC::MiniContextMenuParams& params) { | |
| 354 if (cmd == IDC_ABOUT_CHROME_FRAME) { | 353 if (cmd == IDC_ABOUT_CHROME_FRAME) { |
| 355 int tab_handle = automation_client_->tab()->handle(); | 354 int tab_handle = automation_client_->tab()->handle(); |
| 356 HostNavigate(GURL("about:version"), GURL(), NEW_WINDOW); | 355 HostNavigate(GURL("about:version"), GURL(), NEW_WINDOW); |
| 357 return true; | 356 return true; |
| 358 } else { | 357 } else { |
| 359 switch (cmd) { | 358 switch (cmd) { |
| 360 case IDS_CONTENT_CONTEXT_SAVEAUDIOAS: | 359 case IDS_CONTENT_CONTEXT_SAVEAUDIOAS: |
| 361 case IDS_CONTENT_CONTEXT_SAVEVIDEOAS: | 360 case IDS_CONTENT_CONTEXT_SAVEVIDEOAS: |
| 362 case IDS_CONTENT_CONTEXT_SAVEIMAGEAS: | 361 case IDS_CONTENT_CONTEXT_SAVEIMAGEAS: |
| 363 case IDS_CONTENT_CONTEXT_SAVELINKAS: { | 362 case IDS_CONTENT_CONTEXT_SAVELINKAS: { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 // after CF is first loaded. | 407 // after CF is first loaded. |
| 409 if (is_IE && GetIEVersion() < IE_8 && !ceee_util::IsIeCeeeRegistered()) { | 408 if (is_IE && GetIEVersion() < IE_8 && !ceee_util::IsIeCeeeRegistered()) { |
| 410 *profile_path = GetIETemporaryFilesFolder(); | 409 *profile_path = GetIETemporaryFilesFolder(); |
| 411 *profile_path = profile_path->Append(L"Google Chrome Frame"); | 410 *profile_path = profile_path->Append(L"Google Chrome Frame"); |
| 412 } else { | 411 } else { |
| 413 ChromeFramePlugin::GetProfilePath(profile_name, profile_path); | 412 ChromeFramePlugin::GetProfilePath(profile_name, profile_path); |
| 414 } | 413 } |
| 415 DVLOG(1) << __FUNCTION__ << ": " << profile_path->value(); | 414 DVLOG(1) << __FUNCTION__ << ": " << profile_path->value(); |
| 416 } | 415 } |
| 417 | 416 |
| 418 void OnLoad(int tab_handle, const GURL& url) { | 417 void OnLoad(const GURL& url) { |
| 419 if (ready_state_ < READYSTATE_COMPLETE) { | 418 if (ready_state_ < READYSTATE_COMPLETE) { |
| 420 ready_state_ = READYSTATE_COMPLETE; | 419 ready_state_ = READYSTATE_COMPLETE; |
| 421 FireOnChanged(DISPID_READYSTATE); | 420 FireOnChanged(DISPID_READYSTATE); |
| 422 } | 421 } |
| 423 | 422 |
| 424 HRESULT hr = InvokeScriptFunction(onload_handler_, url.spec()); | 423 HRESULT hr = InvokeScriptFunction(onload_handler_, url.spec()); |
| 425 } | 424 } |
| 426 | 425 |
| 427 void OnLoadFailed(int error_code, const std::string& url) { | 426 void OnLoadFailed(int error_code, const std::string& url) { |
| 428 HRESULT hr = InvokeScriptFunction(onerror_handler_, url); | 427 HRESULT hr = InvokeScriptFunction(onerror_handler_, url); |
| 429 } | 428 } |
| 430 | 429 |
| 431 void OnMessageFromChromeFrame(int tab_handle, const std::string& message, | 430 void OnMessageFromChromeFrame(const std::string& message, |
| 432 const std::string& origin, | 431 const std::string& origin, |
| 433 const std::string& target) { | 432 const std::string& target) { |
| 434 base::win::ScopedComPtr<IDispatch> message_event; | 433 base::win::ScopedComPtr<IDispatch> message_event; |
| 435 if (SUCCEEDED(CreateDomEvent("message", message, origin, | 434 if (SUCCEEDED(CreateDomEvent("message", message, origin, |
| 436 message_event.Receive()))) { | 435 message_event.Receive()))) { |
| 437 base::win::ScopedVariant event_var; | 436 base::win::ScopedVariant event_var; |
| 438 event_var.Set(static_cast<IDispatch*>(message_event)); | 437 event_var.Set(static_cast<IDispatch*>(message_event)); |
| 439 InvokeScriptFunction(onmessage_handler_, event_var.AsInput()); | 438 InvokeScriptFunction(onmessage_handler_, event_var.AsInput()); |
| 440 } | 439 } |
| 441 } | 440 } |
| 442 | 441 |
| 443 virtual void OnTabbedOut(int tab_handle, bool reverse) { | 442 virtual void OnTabbedOut(bool reverse) { |
| 444 DCHECK(m_bInPlaceActive); | 443 DCHECK(m_bInPlaceActive); |
| 445 | 444 |
| 446 HWND parent = ::GetParent(m_hWnd); | 445 HWND parent = ::GetParent(m_hWnd); |
| 447 ::SetFocus(parent); | 446 ::SetFocus(parent); |
| 448 base::win::ScopedComPtr<IOleControlSite> control_site; | 447 base::win::ScopedComPtr<IOleControlSite> control_site; |
| 449 control_site.QueryFrom(m_spClientSite); | 448 control_site.QueryFrom(m_spClientSite); |
| 450 if (control_site) | 449 if (control_site) |
| 451 control_site->OnFocus(FALSE); | 450 control_site->OnFocus(FALSE); |
| 452 } | 451 } |
| 453 | 452 |
| 454 virtual void OnOpenURL(int tab_handle, const GURL& url_to_open, | 453 virtual void OnOpenURL(const GURL& url_to_open, |
| 455 const GURL& referrer, int open_disposition) { | 454 const GURL& referrer, int open_disposition) { |
| 456 HostNavigate(url_to_open, referrer, open_disposition); | 455 HostNavigate(url_to_open, referrer, open_disposition); |
| 457 } | 456 } |
| 458 | 457 |
| 459 // Called when Chrome has decided that a request needs to be treated as a | 458 // Called when Chrome has decided that a request needs to be treated as a |
| 460 // download. The caller will be the UrlRequest worker thread. | 459 // download. The caller will be the UrlRequest worker thread. |
| 461 // The worker thread will block while we process the request and take | 460 // The worker thread will block while we process the request and take |
| 462 // ownership of the request object. | 461 // ownership of the request object. |
| 463 // There's room for improvement here and also see todo below. | 462 // There's room for improvement here and also see todo below. |
| 464 LPARAM OnDownloadRequestInHost(UINT message, WPARAM wparam, LPARAM lparam, | 463 LPARAM OnDownloadRequestInHost(UINT message, WPARAM wparam, LPARAM lparam, |
| 465 BOOL& handled) { | 464 BOOL& handled) { |
| 466 base::win::ScopedComPtr<IMoniker> moniker( | 465 base::win::ScopedComPtr<IMoniker> moniker( |
| 467 reinterpret_cast<IMoniker*>(lparam)); | 466 reinterpret_cast<IMoniker*>(lparam)); |
| 468 DCHECK(moniker); | 467 DCHECK(moniker); |
| 469 base::win::ScopedComPtr<IBindCtx> bind_context( | 468 base::win::ScopedComPtr<IBindCtx> bind_context( |
| 470 reinterpret_cast<IBindCtx*>(wparam)); | 469 reinterpret_cast<IBindCtx*>(wparam)); |
| 471 | 470 |
| 472 // TODO(tommi): It looks like we might have to switch the request object | 471 // TODO(tommi): It looks like we might have to switch the request object |
| 473 // into a pass-through request object and serve up any thus far received | 472 // into a pass-through request object and serve up any thus far received |
| 474 // content and headers to IE in order to prevent what can currently happen | 473 // content and headers to IE in order to prevent what can currently happen |
| 475 // which is reissuing requests and turning POST into GET. | 474 // which is reissuing requests and turning POST into GET. |
| 476 if (moniker) { | 475 if (moniker) { |
| 477 NavigateBrowserToMoniker(doc_site_, moniker, NULL, bind_context, NULL); | 476 NavigateBrowserToMoniker(doc_site_, moniker, NULL, bind_context, NULL); |
| 478 } | 477 } |
| 479 | 478 |
| 480 return TRUE; | 479 return TRUE; |
| 481 } | 480 } |
| 482 | 481 |
| 483 virtual void OnAttachExternalTab(int tab_handle, | 482 virtual void OnAttachExternalTab(const AttachExternalTabParams& params) { |
| 484 const IPC::AttachExternalTabParams& params) { | |
| 485 std::wstring wide_url = url_; | 483 std::wstring wide_url = url_; |
| 486 GURL parsed_url(WideToUTF8(wide_url)); | 484 GURL parsed_url(WideToUTF8(wide_url)); |
| 487 | 485 |
| 488 // If Chrome-Frame is presently navigated to an extension page, navigating | 486 // If Chrome-Frame is presently navigated to an extension page, navigating |
| 489 // the host to a url with scheme chrome-extension will fail, so we | 487 // the host to a url with scheme chrome-extension will fail, so we |
| 490 // point the host at http:local_host. Note that this is NOT the URL | 488 // point the host at http:local_host. Note that this is NOT the URL |
| 491 // to which the host is directed. It is only used as a temporary message | 489 // to which the host is directed. It is only used as a temporary message |
| 492 // passing mechanism between this CF instance, and the BHO that will | 490 // passing mechanism between this CF instance, and the BHO that will |
| 493 // be constructed in the new IE tab. | 491 // be constructed in the new IE tab. |
| 494 if (parsed_url.SchemeIs("chrome-extension") && | 492 if (parsed_url.SchemeIs("chrome-extension") && |
| (...skipping 13 matching lines...) Expand all Loading... |
| 508 params.cookie, | 506 params.cookie, |
| 509 params.disposition, | 507 params.disposition, |
| 510 params.dimensions.x(), | 508 params.dimensions.x(), |
| 511 params.dimensions.y(), | 509 params.dimensions.y(), |
| 512 params.dimensions.width(), | 510 params.dimensions.width(), |
| 513 params.dimensions.height(), | 511 params.dimensions.height(), |
| 514 params.profile_name.c_str()); | 512 params.profile_name.c_str()); |
| 515 HostNavigate(GURL(url), GURL(), params.disposition); | 513 HostNavigate(GURL(url), GURL(), params.disposition); |
| 516 } | 514 } |
| 517 | 515 |
| 518 virtual void OnHandleContextMenu(int tab_handle, HANDLE menu_handle, | 516 virtual void OnHandleContextMenu(HANDLE menu_handle, |
| 519 int align_flags, | 517 int align_flags, |
| 520 const IPC::MiniContextMenuParams& params) { | 518 const MiniContextMenuParams& params) { |
| 521 scoped_refptr<BasePlugin> ref(this); | 519 scoped_refptr<BasePlugin> ref(this); |
| 522 ChromeFramePlugin<T>::OnHandleContextMenu(tab_handle, menu_handle, | 520 ChromeFramePlugin<T>::OnHandleContextMenu(menu_handle, align_flags, params); |
| 523 align_flags, params); | |
| 524 } | 521 } |
| 525 | 522 |
| 526 LRESULT OnCreate(UINT message, WPARAM wparam, LPARAM lparam, | 523 LRESULT OnCreate(UINT message, WPARAM wparam, LPARAM lparam, |
| 527 BOOL& handled) { // NO_LINT | 524 BOOL& handled) { // NO_LINT |
| 528 ModifyStyle(0, WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0); | 525 ModifyStyle(0, WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0); |
| 529 url_fetcher_->put_notification_window(m_hWnd); | 526 url_fetcher_->put_notification_window(m_hWnd); |
| 530 if (automation_client_.get()) { | 527 if (automation_client_.get()) { |
| 531 automation_client_->SetParentWindow(m_hWnd); | 528 automation_client_->SetParentWindow(m_hWnd); |
| 532 } else { | 529 } else { |
| 533 NOTREACHED() << "No automation server"; | 530 NOTREACHED() << "No automation server"; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 560 virtual void OnAutomationServerLaunchFailed( | 557 virtual void OnAutomationServerLaunchFailed( |
| 561 AutomationLaunchResult reason, const std::string& server_version) { | 558 AutomationLaunchResult reason, const std::string& server_version) { |
| 562 DVLOG(1) << __FUNCTION__; | 559 DVLOG(1) << __FUNCTION__; |
| 563 if (reason == AUTOMATION_SERVER_CRASHED) | 560 if (reason == AUTOMATION_SERVER_CRASHED) |
| 564 draw_sad_tab_ = true; | 561 draw_sad_tab_ = true; |
| 565 | 562 |
| 566 ready_state_ = READYSTATE_UNINITIALIZED; | 563 ready_state_ = READYSTATE_UNINITIALIZED; |
| 567 FireOnChanged(DISPID_READYSTATE); | 564 FireOnChanged(DISPID_READYSTATE); |
| 568 } | 565 } |
| 569 | 566 |
| 570 virtual void OnCloseTab(int tab_handle) { | 567 virtual void OnCloseTab() { |
| 571 Fire_onclose(); | 568 Fire_onclose(); |
| 572 } | 569 } |
| 573 | 570 |
| 574 // Overridden to take advantage of readystate prop changes and send those | 571 // Overridden to take advantage of readystate prop changes and send those |
| 575 // to potential listeners. | 572 // to potential listeners. |
| 576 HRESULT FireOnChanged(DISPID dispid) { | 573 HRESULT FireOnChanged(DISPID dispid) { |
| 577 if (dispid == DISPID_READYSTATE) { | 574 if (dispid == DISPID_READYSTATE) { |
| 578 Fire_onreadystatechanged(ready_state_); | 575 Fire_onreadystatechanged(ready_state_); |
| 579 } | 576 } |
| 580 return __super::FireOnChanged(dispid); | 577 return __super::FireOnChanged(dispid); |
| (...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1086 // is very simple. Just post the message to our parent window and IE | 1083 // is very simple. Just post the message to our parent window and IE |
| 1087 // will pick it up if it's an accelerator. We won't know for sure if | 1084 // will pick it up if it's an accelerator. We won't know for sure if |
| 1088 // the browser handled the keystroke or not. | 1085 // the browser handled the keystroke or not. |
| 1089 ::PostMessage(accel_message.hwnd, accel_message.message, | 1086 ::PostMessage(accel_message.hwnd, accel_message.message, |
| 1090 accel_message.wParam, accel_message.lParam); | 1087 accel_message.wParam, accel_message.lParam); |
| 1091 } | 1088 } |
| 1092 | 1089 |
| 1093 return hr; | 1090 return hr; |
| 1094 } | 1091 } |
| 1095 | 1092 |
| 1096 virtual void OnAcceleratorPressed(int tab_handle, const MSG& accel_message) { | 1093 virtual void OnAcceleratorPressed(const MSG& accel_message) { |
| 1097 DCHECK(m_spInPlaceSite != NULL); | 1094 DCHECK(m_spInPlaceSite != NULL); |
| 1098 // Allow our host a chance to handle the accelerator. | 1095 // Allow our host a chance to handle the accelerator. |
| 1099 // This catches things like Ctrl+F, Ctrl+O etc, but not browser | 1096 // This catches things like Ctrl+F, Ctrl+O etc, but not browser |
| 1100 // accelerators such as F11, Ctrl+T etc. | 1097 // accelerators such as F11, Ctrl+T etc. |
| 1101 // (see AllowFrameToTranslateAccelerator for those). | 1098 // (see AllowFrameToTranslateAccelerator for those). |
| 1102 HRESULT hr = TranslateAccelerator(const_cast<MSG*>(&accel_message)); | 1099 HRESULT hr = TranslateAccelerator(const_cast<MSG*>(&accel_message)); |
| 1103 if (hr != S_OK) | 1100 if (hr != S_OK) |
| 1104 hr = AllowFrameToTranslateAccelerator(accel_message); | 1101 hr = AllowFrameToTranslateAccelerator(accel_message); |
| 1105 | 1102 |
| 1106 DVLOG(1) << __FUNCTION__ << " browser response: " | 1103 DVLOG(1) << __FUNCTION__ << " browser response: " |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1271 EventHandlers onextensionready_; | 1268 EventHandlers onextensionready_; |
| 1272 | 1269 |
| 1273 // Handle network requests when host network stack is used. Passed to the | 1270 // Handle network requests when host network stack is used. Passed to the |
| 1274 // automation client on initialization. | 1271 // automation client on initialization. |
| 1275 scoped_ptr<UrlmonUrlRequestManager> url_fetcher_; | 1272 scoped_ptr<UrlmonUrlRequestManager> url_fetcher_; |
| 1276 | 1273 |
| 1277 HINSTANCE prev_resource_instance_; | 1274 HINSTANCE prev_resource_instance_; |
| 1278 }; | 1275 }; |
| 1279 | 1276 |
| 1280 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ | 1277 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ |
| OLD | NEW |