Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: chrome_frame/chrome_frame_activex_base.h

Issue 274071: When Chrome hands off a URL to be opened by the external host by the ViewHost... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_frame/chrome_active_document.cc ('k') | chrome_frame/chrome_frame_automation.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 if (client_site) { 268 if (client_site) {
269 doc_site_.QueryFrom(client_site); 269 doc_site_.QueryFrom(client_site);
270 } 270 }
271 271
272 return CComControlBase::IOleObject_SetClientSite(client_site); 272 return CComControlBase::IOleObject_SetClientSite(client_site);
273 } 273 }
274 274
275 bool HandleContextMenuCommand(UINT cmd) { 275 bool HandleContextMenuCommand(UINT cmd) {
276 if (cmd == IDC_ABOUT_CHROME_FRAME) { 276 if (cmd == IDC_ABOUT_CHROME_FRAME) {
277 int tab_handle = automation_client_->tab()->handle(); 277 int tab_handle = automation_client_->tab()->handle();
278 OnOpenURL(tab_handle, GURL("about:version"), NEW_WINDOW); 278 OnOpenURL(tab_handle, GURL("about:version"), GURL(), NEW_WINDOW);
279 return true; 279 return true;
280 } 280 }
281 281
282 return false; 282 return false;
283 } 283 }
284 284
285 // Should connections initiated by this class try to block 285 // Should connections initiated by this class try to block
286 // responses served with the X-Frame-Options header? 286 // responses served with the X-Frame-Options header?
287 // ActiveX controls genereally will want to do this, 287 // ActiveX controls genereally will want to do this,
288 // returning true, while true top-level documents 288 // returning true, while true top-level documents
(...skipping 11 matching lines...) Expand all
300 300
301 HWND parent = ::GetParent(m_hWnd); 301 HWND parent = ::GetParent(m_hWnd);
302 ::SetFocus(parent); 302 ::SetFocus(parent);
303 ScopedComPtr<IOleControlSite> control_site; 303 ScopedComPtr<IOleControlSite> control_site;
304 control_site.QueryFrom(m_spClientSite); 304 control_site.QueryFrom(m_spClientSite);
305 if (control_site) 305 if (control_site)
306 control_site->OnFocus(FALSE); 306 control_site->OnFocus(FALSE);
307 } 307 }
308 308
309 virtual void OnOpenURL(int tab_handle, const GURL& url_to_open, 309 virtual void OnOpenURL(int tab_handle, const GURL& url_to_open,
310 int open_disposition) { 310 const GURL& referrer, int open_disposition) {
311 ScopedComPtr<IWebBrowser2> web_browser2; 311 ScopedComPtr<IWebBrowser2> web_browser2;
312 DoQueryService(SID_SWebBrowserApp, m_spClientSite, web_browser2.Receive()); 312 DoQueryService(SID_SWebBrowserApp, m_spClientSite, web_browser2.Receive());
313 DCHECK(web_browser2); 313 DCHECK(web_browser2);
314 314
315 ScopedVariant url; 315 ScopedVariant url;
316 // Check to see if the URL uses a "view-source:" prefix, if so, open it 316 // Check to see if the URL uses a "view-source:" prefix, if so, open it
317 // using chrome frame full tab mode by using 'cf:' protocol handler. 317 // using chrome frame full tab mode by using 'cf:' protocol handler.
318 // Also change the disposition to NEW_WINDOW since IE6 doesn't have tabs. 318 // Also change the disposition to NEW_WINDOW since IE6 doesn't have tabs.
319 if (url_to_open.has_scheme() && (url_to_open.SchemeIs("view-source") || 319 if (url_to_open.has_scheme() && (url_to_open.SchemeIs("view-source") ||
320 url_to_open.SchemeIs("about"))) { 320 url_to_open.SchemeIs("about"))) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 // CreateUri(UTF8ToWide(open_url_command->url_.spec()).c_str(), 372 // CreateUri(UTF8ToWide(open_url_command->url_.spec()).c_str(),
373 // Uri_CREATE_IE_SETTINGS, 0, &uri); 373 // Uri_CREATE_IE_SETTINGS, 0, &uri);
374 // CComPtr<IBindCtx> bind_ctx; 374 // CComPtr<IBindCtx> bind_ctx;
375 // CreateBindCtx(0, &bind_ctx); 375 // CreateBindCtx(0, &bind_ctx);
376 // target_frame->AggregatedNavigation2( 376 // target_frame->AggregatedNavigation2(
377 // HLNF_TRUSTFIRSTDOWNLOAD|HLNF_OPENINNEWWINDOW, bind_ctx, NULL, 377 // HLNF_TRUSTFIRSTDOWNLOAD|HLNF_OPENINNEWWINDOW, bind_ctx, NULL,
378 // L"No_Name", uri, L""); 378 // L"No_Name", uri, L"");
379 // } 379 // }
380 // End of MSHTML-like logic 380 // End of MSHTML-like logic
381 VARIANT empty = ScopedVariant::kEmptyVariant; 381 VARIANT empty = ScopedVariant::kEmptyVariant;
382 web_browser2->Navigate2(url.AsInput(), &flags, &empty, &empty, &empty); 382 ScopedVariant http_headers;
383
384 if (referrer.is_valid()) {
385 std::wstring referrer_header = L"Referer: ";
386 referrer_header += UTF8ToWide(referrer.spec());
387 referrer_header += L"\r\n\r\n";
388 http_headers.Set(referrer_header.c_str());
389 }
390
391 web_browser2->Navigate2(url.AsInput(), &flags, &empty, &empty,
392 http_headers.AsInput());
383 web_browser2->put_Visible(VARIANT_TRUE); 393 web_browser2->put_Visible(VARIANT_TRUE);
384 } 394 }
385 395
386 virtual void OnRequestStart(int tab_handle, int request_id, 396 virtual void OnRequestStart(int tab_handle, int request_id,
387 const IPC::AutomationURLRequest& request_info) { 397 const IPC::AutomationURLRequest& request_info) {
388 scoped_refptr<CComObject<UrlmonUrlRequest> > request; 398 scoped_refptr<CComObject<UrlmonUrlRequest> > request;
389 if (base_url_request_.get() && 399 if (base_url_request_.get() &&
390 GURL(base_url_request_->url()) == GURL(request_info.url)) { 400 GURL(base_url_request_->url()) == GURL(request_info.url)) {
391 request.swap(base_url_request_); 401 request.swap(base_url_request_);
392 } else { 402 } else {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 data.c_str()); 445 data.c_str());
436 DCHECK(ret) << "InternetSetcookie failed. Error: " << GetLastError(); 446 DCHECK(ret) << "InternetSetcookie failed. Error: " << GetLastError();
437 } 447 }
438 448
439 virtual void OnAttachExternalTab(int tab_handle, 449 virtual void OnAttachExternalTab(int tab_handle,
440 intptr_t cookie, 450 intptr_t cookie,
441 int disposition) { 451 int disposition) {
442 std::string url; 452 std::string url;
443 url = StringPrintf("cf:attach_external_tab&%d&%d", 453 url = StringPrintf("cf:attach_external_tab&%d&%d",
444 cookie, disposition); 454 cookie, disposition);
445 OnOpenURL(tab_handle, GURL(url), disposition); 455 OnOpenURL(tab_handle, GURL(url), GURL(), disposition);
446 } 456 }
447 457
448 LRESULT OnCreate(UINT message, WPARAM wparam, LPARAM lparam, 458 LRESULT OnCreate(UINT message, WPARAM wparam, LPARAM lparam,
449 BOOL& handled) { // NO_LINT 459 BOOL& handled) { // NO_LINT
450 ModifyStyle(0, WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0); 460 ModifyStyle(0, WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0);
451 automation_client_->SetParentWindow(m_hWnd); 461 automation_client_->SetParentWindow(m_hWnd);
452 // Only fire the 'interactive' ready state if we aren't there already. 462 // Only fire the 'interactive' ready state if we aren't there already.
453 if (ready_state_ < READYSTATE_INTERACTIVE) { 463 if (ready_state_ < READYSTATE_INTERACTIVE) {
454 ready_state_ = READYSTATE_INTERACTIVE; 464 ready_state_ = READYSTATE_INTERACTIVE;
455 FireOnChanged(DISPID_READYSTATE); 465 FireOnChanged(DISPID_READYSTATE);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 std::string src_utf8; 512 std::string src_utf8;
503 WideToUTF8(src, SysStringLen(src), &src_utf8); 513 WideToUTF8(src, SysStringLen(src), &src_utf8);
504 std::string full_url = ResolveURL(GetDocumentUrl(), src_utf8); 514 std::string full_url = ResolveURL(GetDocumentUrl(), src_utf8);
505 if (full_url.empty()) { 515 if (full_url.empty()) {
506 return E_INVALIDARG; 516 return E_INVALIDARG;
507 } 517 }
508 518
509 // We can initiate navigation here even if ready_state is not complete. 519 // We can initiate navigation here even if ready_state is not complete.
510 // We do not have to set proxy, and AutomationClient will take care 520 // We do not have to set proxy, and AutomationClient will take care
511 // of navigation just after CreateExternalTab is done. 521 // of navigation just after CreateExternalTab is done.
512 if (!automation_client_->InitiateNavigation(full_url, is_privileged_)) { 522 if (!automation_client_->InitiateNavigation(full_url,
523 GetDocumentUrl(),
524 is_privileged_)) {
513 // TODO(robertshield): Make InitiateNavigation return more useful 525 // TODO(robertshield): Make InitiateNavigation return more useful
514 // error information. 526 // error information.
515 return E_INVALIDARG; 527 return E_INVALIDARG;
516 } 528 }
517 529
518 // Save full URL in BSTR member 530 // Save full URL in BSTR member
519 url_.Reset(::SysAllocString(UTF8ToWide(full_url).c_str())); 531 url_.Reset(::SysAllocString(UTF8ToWide(full_url).c_str()));
520 532
521 return S_OK; 533 return S_OK;
522 } 534 }
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 EventHandlers onloaderror_; 895 EventHandlers onloaderror_;
884 EventHandlers onload_; 896 EventHandlers onload_;
885 EventHandlers onreadystatechanged_; 897 EventHandlers onreadystatechanged_;
886 EventHandlers onprivatemessage_; 898 EventHandlers onprivatemessage_;
887 899
888 // The UrlmonUrlRequest instance instantiated for downloading the base URL. 900 // The UrlmonUrlRequest instance instantiated for downloading the base URL.
889 scoped_refptr<CComObject<UrlmonUrlRequest> > base_url_request_; 901 scoped_refptr<CComObject<UrlmonUrlRequest> > base_url_request_;
890 }; 902 };
891 903
892 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ 904 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_
OLDNEW
« no previous file with comments | « chrome_frame/chrome_active_document.cc ('k') | chrome_frame/chrome_frame_automation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698