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

Side by Side Diff: chrome_frame/chrome_active_document.cc

Issue 6284002: Fix a ChromeFrame Back Forward navigation issue which occurs when we modify t... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 11 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.h ('k') | no next file » | 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) 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 // Implementation of ChromeActiveDocument 5 // Implementation of ChromeActiveDocument
6 #include "chrome_frame/chrome_active_document.h" 6 #include "chrome_frame/chrome_active_document.h"
7 7
8 #include <hlink.h> 8 #include <hlink.h>
9 #include <htiface.h> 9 #include <htiface.h>
10 #include <initguid.h> 10 #include <initguid.h>
(...skipping 15 matching lines...) Expand all
26 #include "base/string_tokenizer.h" 26 #include "base/string_tokenizer.h"
27 #include "base/string_util.h" 27 #include "base/string_util.h"
28 #include "base/threading/thread.h" 28 #include "base/threading/thread.h"
29 #include "base/threading/thread_local.h" 29 #include "base/threading/thread_local.h"
30 #include "base/utf_string_conversions.h" 30 #include "base/utf_string_conversions.h"
31 #include "base/win/scoped_variant.h" 31 #include "base/win/scoped_variant.h"
32 #include "base/win/win_util.h" 32 #include "base/win/win_util.h"
33 #include "grit/generated_resources.h" 33 #include "grit/generated_resources.h"
34 #include "chrome/app/chrome_command_ids.h" 34 #include "chrome/app/chrome_command_ids.h"
35 #include "chrome/app/chrome_dll_resource.h" 35 #include "chrome/app/chrome_dll_resource.h"
36 #include "chrome/browser/tab_contents/tab_contents.h"
36 #include "chrome/common/chrome_constants.h" 37 #include "chrome/common/chrome_constants.h"
37 #include "chrome/common/navigation_types.h" 38 #include "chrome/common/navigation_types.h"
38 #include "chrome/common/page_zoom.h" 39 #include "chrome/common/page_zoom.h"
39 #include "chrome/test/automation/browser_proxy.h" 40 #include "chrome/test/automation/browser_proxy.h"
40 #include "chrome/test/automation/tab_proxy.h" 41 #include "chrome/test/automation/tab_proxy.h"
41 #include "chrome_frame/bho.h" 42 #include "chrome_frame/bho.h"
42 #include "chrome_frame/bind_context_info.h" 43 #include "chrome_frame/bind_context_info.h"
43 #include "chrome_frame/buggy_bho_handling.h" 44 #include "chrome_frame/buggy_bho_handling.h"
44 #include "chrome_frame/crash_reporting/crash_metrics.h" 45 #include "chrome_frame/crash_reporting/crash_metrics.h"
45 #include "chrome_frame/utils.h" 46 #include "chrome_frame/utils.h"
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 int flags, const NavigationInfo& nav_info) { 621 int flags, const NavigationInfo& nav_info) {
621 // TODO(joshia): handle INVALIDATE_TAB,INVALIDATE_LOAD etc. 622 // TODO(joshia): handle INVALIDATE_TAB,INVALIDATE_LOAD etc.
622 DVLOG(1) << __FUNCTION__ 623 DVLOG(1) << __FUNCTION__
623 << "\n Flags: " << flags 624 << "\n Flags: " << flags
624 << ", Url: " << nav_info.url 625 << ", Url: " << nav_info.url
625 << ", Title: " << nav_info.title 626 << ", Title: " << nav_info.title
626 << ", Type: " << nav_info.navigation_type 627 << ", Type: " << nav_info.navigation_type
627 << ", Relative Offset: " << nav_info.relative_offset 628 << ", Relative Offset: " << nav_info.relative_offset
628 << ", Index: " << nav_info.navigation_index; 629 << ", Index: " << nav_info.navigation_index;
629 630
630 UpdateNavigationState(nav_info); 631 UpdateNavigationState(nav_info, flags);
631 } 632 }
632 633
633 void ChromeActiveDocument::OnUpdateTargetUrl( 634 void ChromeActiveDocument::OnUpdateTargetUrl(
634 const std::wstring& new_target_url) { 635 const std::wstring& new_target_url) {
635 if (in_place_frame_) 636 if (in_place_frame_)
636 in_place_frame_->SetStatusText(new_target_url.c_str()); 637 in_place_frame_->SetStatusText(new_target_url.c_str());
637 } 638 }
638 639
639 bool IsFindAccelerator(const MSG& msg) { 640 bool IsFindAccelerator(const MSG& msg) {
640 // TODO(robertshield): This may not stand up to localization. Fix if this 641 // TODO(robertshield): This may not stand up to localization. Fix if this
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 686
686 CrashMetricsReporter::GetInstance()->IncrementMetric( 687 CrashMetricsReporter::GetInstance()->IncrementMetric(
687 CrashMetricsReporter::CHROME_FRAME_NAVIGATION_COUNT); 688 CrashMetricsReporter::CHROME_FRAME_NAVIGATION_COUNT);
688 689
689 // This could be NULL if the active document instance is being destroyed. 690 // This could be NULL if the active document instance is being destroyed.
690 if (!m_spInPlaceSite) { 691 if (!m_spInPlaceSite) {
691 DVLOG(1) << __FUNCTION__ << "m_spInPlaceSite is NULL. Returning"; 692 DVLOG(1) << __FUNCTION__ << "m_spInPlaceSite is NULL. Returning";
692 return; 693 return;
693 } 694 }
694 695
695 UpdateNavigationState(nav_info); 696 UpdateNavigationState(nav_info, 0);
696 } 697 }
697 698
698 void ChromeActiveDocument::OnCloseTab() { 699 void ChromeActiveDocument::OnCloseTab() {
699 // Base class will fire DIChromeFrameEvents::onclose. 700 // Base class will fire DIChromeFrameEvents::onclose.
700 BaseActiveX::OnCloseTab(); 701 BaseActiveX::OnCloseTab();
701 702
702 // Close the container window. 703 // Close the container window.
703 ScopedComPtr<IWebBrowser2> web_browser2; 704 ScopedComPtr<IWebBrowser2> web_browser2;
704 DoQueryService(SID_SWebBrowserApp, m_spClientSite, web_browser2.Receive()); 705 DoQueryService(SID_SWebBrowserApp, m_spClientSite, web_browser2.Receive());
705 if (web_browser2) 706 if (web_browser2)
706 web_browser2->Quit(); 707 web_browser2->Quit();
707 } 708 }
708 709
709 void ChromeActiveDocument::UpdateNavigationState( 710 void ChromeActiveDocument::UpdateNavigationState(
710 const NavigationInfo& new_navigation_info) { 711 const NavigationInfo& new_navigation_info, int flags) {
711 HRESULT hr = S_OK; 712 HRESULT hr = S_OK;
712 bool is_title_changed = (navigation_info_.title != new_navigation_info.title); 713 bool is_title_changed = (navigation_info_.title != new_navigation_info.title);
713 bool is_ssl_state_changed = 714 bool is_ssl_state_changed =
714 (navigation_info_.security_style != new_navigation_info.security_style) || 715 (navigation_info_.security_style != new_navigation_info.security_style) ||
715 (navigation_info_.displayed_insecure_content != 716 (navigation_info_.displayed_insecure_content !=
716 new_navigation_info.displayed_insecure_content) || 717 new_navigation_info.displayed_insecure_content) ||
717 (navigation_info_.ran_insecure_content != 718 (navigation_info_.ran_insecure_content !=
718 new_navigation_info.ran_insecure_content); 719 new_navigation_info.ran_insecure_content);
719 720
720 if (is_ssl_state_changed) { 721 if (is_ssl_state_changed) {
(...skipping 26 matching lines...) Expand all
747 // We get notified after the fact, when navigations are initiated within 748 // We get notified after the fact, when navigations are initiated within
748 // Chrome via window.open calls. These navigations are handled by creating 749 // Chrome via window.open calls. These navigations are handled by creating
749 // an external tab container within chrome and then connecting to it from IE. 750 // an external tab container within chrome and then connecting to it from IE.
750 // We still want to update the address bar/history, etc, to ensure that 751 // We still want to update the address bar/history, etc, to ensure that
751 // the special URL used by Chrome to indicate this is updated correctly. 752 // the special URL used by Chrome to indicate this is updated correctly.
752 ChromeFrameUrl cf_url; 753 ChromeFrameUrl cf_url;
753 bool is_attach_external_tab_url = cf_url.Parse(std::wstring(url_)) && 754 bool is_attach_external_tab_url = cf_url.Parse(std::wstring(url_)) &&
754 cf_url.attach_to_external_tab(); 755 cf_url.attach_to_external_tab();
755 756
756 bool is_internal_navigation = 757 bool is_internal_navigation =
757 IsNewNavigation(new_navigation_info) || is_attach_external_tab_url; 758 IsNewNavigation(new_navigation_info, flags) || is_attach_external_tab_url;
758 759
759 if (new_navigation_info.url.is_valid()) 760 if (new_navigation_info.url.is_valid())
760 url_.Allocate(UTF8ToWide(new_navigation_info.url.spec()).c_str()); 761 url_.Allocate(UTF8ToWide(new_navigation_info.url.spec()).c_str());
761 762
762 if (is_internal_navigation) { 763 if (is_internal_navigation) {
763 ScopedComPtr<IDocObjectService> doc_object_svc; 764 ScopedComPtr<IDocObjectService> doc_object_svc;
764 ScopedComPtr<IWebBrowserEventsService> web_browser_events_svc; 765 ScopedComPtr<IWebBrowserEventsService> web_browser_events_svc;
765 766
766 buggy_bho::BuggyBhoTls bad_bho_tls; 767 buggy_bho::BuggyBhoTls bad_bho_tls;
767 if (GetConfigBool(true, kEnableBuggyBhoIntercept)) { 768 if (GetConfigBool(true, kEnableBuggyBhoIntercept)) {
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
1357 web_browser2->put_Height(dimensions_.height()); 1358 web_browser2->put_Height(dimensions_.height());
1358 web_browser2->put_Left(dimensions_.x()); 1359 web_browser2->put_Left(dimensions_.x());
1359 web_browser2->put_Top(dimensions_.y()); 1360 web_browser2->put_Top(dimensions_.y());
1360 1361
1361 dimensions_.set_height(0); 1362 dimensions_.set_height(0);
1362 dimensions_.set_width(0); 1363 dimensions_.set_width(0);
1363 } 1364 }
1364 } 1365 }
1365 1366
1366 bool ChromeActiveDocument::IsNewNavigation( 1367 bool ChromeActiveDocument::IsNewNavigation(
1367 const NavigationInfo& new_navigation_info) const { 1368 const NavigationInfo& new_navigation_info, int flags) const {
1368 // A new navigation is typically an internal navigation which is initiated by 1369 // A new navigation is typically an internal navigation which is initiated by
1369 // the renderer(WebKit). Condition 1 below has to be true along with the 1370 // the renderer(WebKit). Condition 1 below has to be true along with the
1370 // any of the other conditions below. 1371 // any of the other conditions below.
1371 // 1. The navigation index is greater than 0 which means that a top level 1372 // 1. The navigation notification flags passed in as the flags parameter
1373 // is not INVALIDATE_LOAD which indicates that the loading state of the
1374 // tab changed.
1375 // 2. The navigation index is greater than 0 which means that a top level
1372 // navigation was initiated on the current external tab. 1376 // navigation was initiated on the current external tab.
1373 // 2. The navigation type has changed. 1377 // 3. The navigation type has changed.
1374 // 3. The url or the referrer are different. 1378 // 4. The url or the referrer are different.
1379 if (flags == TabContents::INVALIDATE_LOAD)
1380 return false;
1381
1375 if (new_navigation_info.navigation_index <= 0) 1382 if (new_navigation_info.navigation_index <= 0)
1376 return false; 1383 return false;
1377 1384
1378 if (new_navigation_info.navigation_index == 1385 if (new_navigation_info.navigation_index ==
1379 navigation_info_.navigation_index) 1386 navigation_info_.navigation_index)
1380 return false; 1387 return false;
1381 1388
1382 if (new_navigation_info.navigation_type != navigation_info_.navigation_type) 1389 if (new_navigation_info.navigation_type != navigation_info_.navigation_type)
1383 return true; 1390 return true;
1384 1391
1385 if (new_navigation_info.url != navigation_info_.url) 1392 if (new_navigation_info.url != navigation_info_.url)
1386 return true; 1393 return true;
1387 1394
1388 if (new_navigation_info.referrer != navigation_info_.referrer) 1395 if (new_navigation_info.referrer != navigation_info_.referrer)
1389 return true; 1396 return true;
1390 1397
1391 return false; 1398 return false;
1392 } 1399 }
OLDNEW
« no previous file with comments | « chrome_frame/chrome_active_document.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698