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

Side by Side Diff: chrome/browser/tab_contents/tab_contents.cc

Issue 6025009: Get rid of RenderViewHostDelegate::Resource and dispatch the IPC messages dir... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 12 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/browser/tab_contents/tab_contents.h ('k') | chrome/common/notification_type.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) 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 #include "chrome/browser/tab_contents/tab_contents.h" 5 #include "chrome/browser/tab_contents/tab_contents.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "app/resource_bundle.h" 10 #include "app/resource_bundle.h"
11 #include "base/auto_reset.h" 11 #include "base/auto_reset.h"
12 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
13 #include "base/metrics/stats_counters.h"
13 #include "base/string16.h" 14 #include "base/string16.h"
14 #include "base/string_util.h" 15 #include "base/string_util.h"
15 #include "base/time.h" 16 #include "base/time.h"
16 #include "base/utf_string_conversions.h" 17 #include "base/utf_string_conversions.h"
17 #include "chrome/browser/autocomplete_history_manager.h" 18 #include "chrome/browser/autocomplete_history_manager.h"
18 #include "chrome/browser/autofill/autofill_manager.h" 19 #include "chrome/browser/autofill/autofill_manager.h"
19 #include "chrome/browser/blocked_content_container.h" 20 #include "chrome/browser/blocked_content_container.h"
20 #include "chrome/browser/bookmarks/bookmark_model.h" 21 #include "chrome/browser/bookmarks/bookmark_model.h"
21 #include "chrome/browser/browser_process.h" 22 #include "chrome/browser/browser_process.h"
22 #include "chrome/browser/browser_shutdown.h" 23 #include "chrome/browser/browser_shutdown.h"
23 #include "chrome/browser/character_encoding.h" 24 #include "chrome/browser/character_encoding.h"
25 #include "chrome/browser/child_process_security_policy.h"
24 #include "chrome/browser/content_settings/content_settings_details.h" 26 #include "chrome/browser/content_settings/content_settings_details.h"
25 #include "chrome/browser/content_settings/host_content_settings_map.h" 27 #include "chrome/browser/content_settings/host_content_settings_map.h"
26 #include "chrome/browser/debugger/devtools_manager.h" 28 #include "chrome/browser/debugger/devtools_manager.h"
27 #include "chrome/browser/defaults.h" 29 #include "chrome/browser/defaults.h"
28 #include "chrome/browser/dom_operation_notification_details.h" 30 #include "chrome/browser/dom_operation_notification_details.h"
29 #include "chrome/browser/dom_ui/dom_ui.h" 31 #include "chrome/browser/dom_ui/dom_ui.h"
30 #include "chrome/browser/download/download_item_model.h" 32 #include "chrome/browser/download/download_item_model.h"
31 #include "chrome/browser/download/download_manager.h" 33 #include "chrome/browser/download/download_manager.h"
32 #include "chrome/browser/download/download_request_limiter.h" 34 #include "chrome/browser/download/download_request_limiter.h"
33 #include "chrome/browser/extensions/extension_service.h" 35 #include "chrome/browser/extensions/extension_service.h"
34 #include "chrome/browser/external_protocol_handler.h" 36 #include "chrome/browser/external_protocol_handler.h"
35 #include "chrome/browser/favicon_service.h" 37 #include "chrome/browser/favicon_service.h"
36 #include "chrome/browser/file_select_helper.h" 38 #include "chrome/browser/file_select_helper.h"
37 #include "chrome/browser/google/google_util.h" 39 #include "chrome/browser/google/google_util.h"
38 #include "chrome/browser/history/history.h" 40 #include "chrome/browser/history/history.h"
39 #include "chrome/browser/history/history_types.h" 41 #include "chrome/browser/history/history_types.h"
40 #include "chrome/browser/history/top_sites.h" 42 #include "chrome/browser/history/top_sites.h"
41 #include "chrome/browser/host_zoom_map.h" 43 #include "chrome/browser/host_zoom_map.h"
42 #include "chrome/browser/hung_renderer_dialog.h" 44 #include "chrome/browser/hung_renderer_dialog.h"
43 #include "chrome/browser/in_process_webkit/session_storage_namespace.h" 45 #include "chrome/browser/in_process_webkit/session_storage_namespace.h"
44 #include "chrome/browser/load_from_memory_cache_details.h" 46 #include "chrome/browser/load_from_memory_cache_details.h"
45 #include "chrome/browser/load_notification_details.h" 47 #include "chrome/browser/load_notification_details.h"
46 #include "chrome/browser/metrics/metric_event_duration_details.h" 48 #include "chrome/browser/metrics/metric_event_duration_details.h"
49 #include "chrome/browser/metrics/user_metrics.h"
47 #include "chrome/browser/modal_html_dialog_delegate.h" 50 #include "chrome/browser/modal_html_dialog_delegate.h"
48 #include "chrome/browser/omnibox_search_hint.h" 51 #include "chrome/browser/omnibox_search_hint.h"
49 #include "chrome/browser/platform_util.h" 52 #include "chrome/browser/platform_util.h"
50 #include "chrome/browser/plugin_installer.h" 53 #include "chrome/browser/plugin_installer.h"
51 #include "chrome/browser/prefs/pref_service.h" 54 #include "chrome/browser/prefs/pref_service.h"
52 #include "chrome/browser/prerender/prerender_manager.h" 55 #include "chrome/browser/prerender/prerender_manager.h"
53 #include "chrome/browser/printing/print_preview_tab_controller.h" 56 #include "chrome/browser/printing/print_preview_tab_controller.h"
54 #include "chrome/browser/printing/print_view_manager.h" 57 #include "chrome/browser/printing/print_view_manager.h"
55 #include "chrome/browser/profiles/profile.h" 58 #include "chrome/browser/profiles/profile.h"
56 #include "chrome/browser/renderer_host/render_process_host.h" 59 #include "chrome/browser/renderer_host/render_process_host.h"
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumFontSize, 544 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumFontSize,
542 IDS_MINIMUM_FONT_SIZE); 545 IDS_MINIMUM_FONT_SIZE);
543 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumLogicalFontSize, 546 prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumLogicalFontSize,
544 IDS_MINIMUM_LOGICAL_FONT_SIZE); 547 IDS_MINIMUM_LOGICAL_FONT_SIZE);
545 prefs->RegisterLocalizedBooleanPref(prefs::kWebKitUsesUniversalDetector, 548 prefs->RegisterLocalizedBooleanPref(prefs::kWebKitUsesUniversalDetector,
546 IDS_USES_UNIVERSAL_DETECTOR); 549 IDS_USES_UNIVERSAL_DETECTOR);
547 prefs->RegisterLocalizedStringPref(prefs::kStaticEncodings, 550 prefs->RegisterLocalizedStringPref(prefs::kStaticEncodings,
548 IDS_STATIC_ENCODING_LIST); 551 IDS_STATIC_ENCODING_LIST);
549 } 552 }
550 553
554 bool TabContents::OnMessageReceived(const IPC::Message& message) {
555 bool handled = true;
556 bool message_is_ok = true;
557 IPC_BEGIN_MESSAGE_MAP_EX(TabContents, message, message_is_ok)
558 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame,
559 OnDidStartProvisionalLoadForFrame)
560 IPC_MESSAGE_HANDLER(ViewHostMsg_DidRedirectProvisionalLoad,
561 OnDidRedirectProvisionalLoad)
562 IPC_MESSAGE_HANDLER(ViewHostMsg_DidFailProvisionalLoadWithError,
563 OnDidFailProvisionalLoadWithError)
564 IPC_MESSAGE_HANDLER(ViewHostMsg_DidLoadResourceFromMemoryCache,
565 OnDidLoadResourceFromMemoryCache)
566 IPC_MESSAGE_HANDLER(ViewHostMsg_DidDisplayInsecureContent,
567 OnDidDisplayInsecureContent)
568 IPC_MESSAGE_HANDLER(ViewHostMsg_DidRunInsecureContent,
569 OnDidRunInsecureContent)
570 IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentLoadedInFrame,
571 OnDocumentLoadedInFrame)
572 IPC_MESSAGE_HANDLER(ViewHostMsg_DidFinishLoad, OnDidFinishLoad)
573 IPC_MESSAGE_UNHANDLED(handled = false)
574 IPC_END_MESSAGE_MAP_EX()
575
576 if (!message_is_ok) {
577 UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_RVD"));
578 GetRenderProcessHost()->ReceivedBadMessage();
579 }
580
581 return handled;
582 }
583
551 // Returns true if contains content rendered by an extension. 584 // Returns true if contains content rendered by an extension.
552 bool TabContents::HostsExtension() const { 585 bool TabContents::HostsExtension() const {
553 return GetURL().SchemeIs(chrome::kExtensionScheme); 586 return GetURL().SchemeIs(chrome::kExtensionScheme);
554 } 587 }
555 588
556 AutoFillManager* TabContents::GetAutoFillManager() { 589 AutoFillManager* TabContents::GetAutoFillManager() {
557 if (autofill_manager_.get() == NULL) 590 if (autofill_manager_.get() == NULL)
558 autofill_manager_.reset(new AutoFillManager(this)); 591 autofill_manager_.reset(new AutoFillManager(this));
559 return autofill_manager_.get(); 592 return autofill_manager_.get();
560 } 593 }
(...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 if (!delegate_) 1581 if (!delegate_)
1549 return; 1582 return;
1550 1583
1551 NavigationEntry* active_entry = controller().GetActiveEntry(); 1584 NavigationEntry* active_entry = controller().GetActiveEntry();
1552 if (!active_entry) 1585 if (!active_entry)
1553 return; 1586 return;
1554 1587
1555 delegate_->ViewSourceForTab(this, active_entry->url()); 1588 delegate_->ViewSourceForTab(this, active_entry->url());
1556 } 1589 }
1557 1590
1591 void TabContents::OnDidStartProvisionalLoadForFrame(int64 frame_id,
1592 bool is_main_frame,
1593 const GURL& url) {
1594 bool is_error_page = (url.spec() == chrome::kUnreachableWebDataURL);
1595 GURL validated_url(url);
1596 render_view_host()->FilterURL(ChildProcessSecurityPolicy::GetInstance(),
1597 GetRenderProcessHost()->id(), &validated_url);
1598
1599 ProvisionalLoadDetails details(
1600 is_main_frame,
1601 controller_.IsURLInPageNavigation(validated_url),
1602 validated_url, std::string(), false, is_error_page, frame_id);
1603 NotificationService::current()->Notify(
1604 NotificationType::FRAME_PROVISIONAL_LOAD_START,
1605 Source<NavigationController>(&controller_),
1606 Details<ProvisionalLoadDetails>(&details));
1607 if (is_main_frame) {
1608 // If we're displaying a network error page do not reset the content
1609 // settings delegate's cookies so the user has a chance to modify cookie
1610 // settings.
1611 if (!is_error_page)
1612 content_settings_delegate_->ClearCookieSpecificContentSettings();
1613 content_settings_delegate_->ClearGeolocationContentSettings();
1614 }
1615 }
1616
1617 void TabContents::OnDidRedirectProvisionalLoad(int32 page_id,
1618 const GURL& source_url,
1619 const GURL& target_url) {
1620 NavigationEntry* entry;
1621 if (page_id == -1)
1622 entry = controller_.pending_entry();
1623 else
1624 entry = controller_.GetEntryWithPageID(GetSiteInstance(), page_id);
1625 if (!entry || entry->url() != source_url)
1626 return;
1627 entry->set_url(target_url);
1628 }
1629
1630 void TabContents::OnDidFailProvisionalLoadWithError(
1631 int64 frame_id,
1632 bool is_main_frame,
1633 int error_code,
1634 const GURL& url,
1635 bool showing_repost_interstitial) {
1636 VLOG(1) << "Failed Provisional Load: " << url.possibly_invalid_spec()
1637 << ", error_code: " << error_code
1638 << " is_main_frame: " << is_main_frame
1639 << " showing_repost_interstitial: " << showing_repost_interstitial
1640 << " frame_id: " << frame_id;
1641 GURL validated_url(url);
1642 render_view_host()->FilterURL(ChildProcessSecurityPolicy::GetInstance(),
1643 GetRenderProcessHost()->id(), &validated_url);
1644
1645 if (net::ERR_ABORTED == error_code) {
1646 // EVIL HACK ALERT! Ignore failed loads when we're showing interstitials.
1647 // This means that the interstitial won't be torn down properly, which is
1648 // bad. But if we have an interstitial, go back to another tab type, and
1649 // then load the same interstitial again, we could end up getting the first
1650 // interstitial's "failed" message (as a result of the cancel) when we're on
1651 // the second one.
1652 //
1653 // We can't tell this apart, so we think we're tearing down the current page
1654 // which will cause a crash later one. There is also some code in
1655 // RenderViewHostManager::RendererAbortedProvisionalLoad that is commented
1656 // out because of this problem.
1657 //
1658 // http://code.google.com/p/chromium/issues/detail?id=2855
1659 // Because this will not tear down the interstitial properly, if "back" is
1660 // back to another tab type, the interstitial will still be somewhat alive
1661 // in the previous tab type. If you navigate somewhere that activates the
1662 // tab with the interstitial again, you'll see a flash before the new load
1663 // commits of the interstitial page.
1664 if (showing_interstitial_page()) {
1665 LOG(WARNING) << "Discarding message during interstitial.";
1666 return;
1667 }
1668
1669 // This will discard our pending entry if we cancelled the load (e.g., if we
1670 // decided to download the file instead of load it). Only discard the
1671 // pending entry if the URLs match, otherwise the user initiated a navigate
1672 // before the page loaded so that the discard would discard the wrong entry.
1673 NavigationEntry* pending_entry = controller_.pending_entry();
1674 if (pending_entry && pending_entry->url() == validated_url) {
1675 controller_.DiscardNonCommittedEntries();
1676 // Update the URL display.
1677 NotifyNavigationStateChanged(TabContents::INVALIDATE_URL);
1678 }
1679
1680 render_manager_.RendererAbortedProvisionalLoad(render_view_host());
1681 }
1682
1683 // Send out a notification that we failed a provisional load with an error.
1684 ProvisionalLoadDetails details(
1685 is_main_frame, controller_.IsURLInPageNavigation(validated_url),
1686 validated_url, std::string(), false, false, frame_id);
1687 details.set_error_code(error_code);
1688
1689 NotificationService::current()->Notify(
1690 NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR,
1691 Source<NavigationController>(&controller_),
1692 Details<ProvisionalLoadDetails>(&details));
1693 }
1694
1695 void TabContents::OnDidLoadResourceFromMemoryCache(
1696 const GURL& url,
1697 const std::string& frame_origin,
1698 const std::string& main_frame_origin,
1699 const std::string& security_info) {
1700 static base::StatsCounter cache("WebKit.CacheHit");
1701 cache.Increment();
1702
1703 // Send out a notification that we loaded a resource from our memory cache.
1704 int cert_id = 0, cert_status = 0, security_bits = -1, connection_status = 0;
1705 SSLManager::DeserializeSecurityInfo(security_info,
1706 &cert_id, &cert_status,
1707 &security_bits,
1708 &connection_status);
1709 LoadFromMemoryCacheDetails details(url, frame_origin, main_frame_origin,
1710 GetRenderProcessHost()->id(), cert_id,
1711 cert_status);
1712
1713 NotificationService::current()->Notify(
1714 NotificationType::LOAD_FROM_MEMORY_CACHE,
1715 Source<NavigationController>(&controller_),
1716 Details<LoadFromMemoryCacheDetails>(&details));
1717 }
1718
1719 void TabContents::OnDidDisplayInsecureContent() {
1720 displayed_insecure_content_ = true;
1721 SSLManager::NotifySSLInternalStateChanged();
1722 }
1723
1724 void TabContents::OnDidRunInsecureContent(
1725 const std::string& security_origin) {
1726 controller_.ssl_manager()->DidRunInsecureContent(security_origin);
1727 }
1728
1729 void TabContents::OnDocumentLoadedInFrame(int64 frame_id) {
1730 controller_.DocumentLoadedInFrame();
1731 NotificationService::current()->Notify(
1732 NotificationType::FRAME_DOM_CONTENT_LOADED,
1733 Source<NavigationController>(&controller_),
1734 Details<int64>(&frame_id));
1735 }
1736
1737 void TabContents::OnDidFinishLoad(int64 frame_id) {
1738 NotificationService::current()->Notify(
1739 NotificationType::FRAME_DID_FINISH_LOAD,
1740 Source<NavigationController>(&controller_),
1741 Details<int64>(&frame_id));
1742 }
1743
1558 // Notifies the RenderWidgetHost instance about the fact that the page is 1744 // Notifies the RenderWidgetHost instance about the fact that the page is
1559 // loading, or done loading and calls the base implementation. 1745 // loading, or done loading and calls the base implementation.
1560 void TabContents::SetIsLoading(bool is_loading, 1746 void TabContents::SetIsLoading(bool is_loading,
1561 LoadNotificationDetails* details) { 1747 LoadNotificationDetails* details) {
1562 if (is_loading == is_loading_) 1748 if (is_loading == is_loading_)
1563 return; 1749 return;
1564 1750
1565 if (!is_loading) { 1751 if (!is_loading) {
1566 load_state_ = net::LOAD_STATE_IDLE; 1752 load_state_ = net::LOAD_STATE_IDLE;
1567 load_state_host_.clear(); 1753 load_state_host_.clear();
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
2182 const std::vector<std::string>& suggestions) { 2368 const std::vector<std::string>& suggestions) {
2183 if (delegate()) 2369 if (delegate())
2184 delegate()->OnSetSuggestions(page_id, suggestions); 2370 delegate()->OnSetSuggestions(page_id, suggestions);
2185 } 2371 }
2186 2372
2187 void TabContents::OnInstantSupportDetermined(int32 page_id, bool result) { 2373 void TabContents::OnInstantSupportDetermined(int32 page_id, bool result) {
2188 if (delegate()) 2374 if (delegate())
2189 delegate()->OnInstantSupportDetermined(page_id, result); 2375 delegate()->OnInstantSupportDetermined(page_id, result);
2190 } 2376 }
2191 2377
2192 void TabContents::DidStartProvisionalLoadForFrame(
2193 RenderViewHost* render_view_host,
2194 int64 frame_id,
2195 bool is_main_frame,
2196 bool is_error_page,
2197 const GURL& url) {
2198 ProvisionalLoadDetails details(is_main_frame,
2199 controller_.IsURLInPageNavigation(url),
2200 url, std::string(), false,
2201 is_error_page, frame_id);
2202 NotificationService::current()->Notify(
2203 NotificationType::FRAME_PROVISIONAL_LOAD_START,
2204 Source<NavigationController>(&controller_),
2205 Details<ProvisionalLoadDetails>(&details));
2206 if (is_main_frame) {
2207 // If we're displaying a network error page do not reset the content
2208 // settings delegate's cookies so the user has a chance to modify cookie
2209 // settings.
2210 if (!is_error_page)
2211 content_settings_delegate_->ClearCookieSpecificContentSettings();
2212 content_settings_delegate_->ClearGeolocationContentSettings();
2213 }
2214 }
2215
2216 void TabContents::DidStartReceivingResourceResponse(
2217 const ResourceRequestDetails& details) {
2218 NotificationService::current()->Notify(
2219 NotificationType::RESOURCE_RESPONSE_STARTED,
2220 Source<NavigationController>(&controller()),
2221 Details<const ResourceRequestDetails>(&details));
2222 }
2223
2224 void TabContents::DidRedirectResource(
2225 const ResourceRedirectDetails& details) {
2226 NotificationService::current()->Notify(
2227 NotificationType::RESOURCE_RECEIVED_REDIRECT,
2228 Source<NavigationController>(&controller()),
2229 Details<const ResourceRequestDetails>(&details));
2230 }
2231
2232 void TabContents::DidLoadResourceFromMemoryCache(
2233 const GURL& url,
2234 const std::string& frame_origin,
2235 const std::string& main_frame_origin,
2236 const std::string& security_info) {
2237 // Send out a notification that we loaded a resource from our memory cache.
2238 int cert_id = 0, cert_status = 0, security_bits = -1, connection_status = 0;
2239 SSLManager::DeserializeSecurityInfo(security_info,
2240 &cert_id, &cert_status,
2241 &security_bits,
2242 &connection_status);
2243 LoadFromMemoryCacheDetails details(url, frame_origin, main_frame_origin,
2244 GetRenderProcessHost()->id(), cert_id,
2245 cert_status);
2246
2247 NotificationService::current()->Notify(
2248 NotificationType::LOAD_FROM_MEMORY_CACHE,
2249 Source<NavigationController>(&controller_),
2250 Details<LoadFromMemoryCacheDetails>(&details));
2251 }
2252
2253 void TabContents::DidDisplayInsecureContent() {
2254 displayed_insecure_content_ = true;
2255 SSLManager::NotifySSLInternalStateChanged();
2256 }
2257
2258 void TabContents::DidRunInsecureContent(const std::string& security_origin) {
2259 controller_.ssl_manager()->DidRunInsecureContent(security_origin);
2260 }
2261
2262 void TabContents::DidFailProvisionalLoadWithError(
2263 RenderViewHost* render_view_host,
2264 int64 frame_id,
2265 bool is_main_frame,
2266 int error_code,
2267 const GURL& url,
2268 bool showing_repost_interstitial) {
2269 if (net::ERR_ABORTED == error_code) {
2270 // EVIL HACK ALERT! Ignore failed loads when we're showing interstitials.
2271 // This means that the interstitial won't be torn down properly, which is
2272 // bad. But if we have an interstitial, go back to another tab type, and
2273 // then load the same interstitial again, we could end up getting the first
2274 // interstitial's "failed" message (as a result of the cancel) when we're on
2275 // the second one.
2276 //
2277 // We can't tell this apart, so we think we're tearing down the current page
2278 // which will cause a crash later one. There is also some code in
2279 // RenderViewHostManager::RendererAbortedProvisionalLoad that is commented
2280 // out because of this problem.
2281 //
2282 // http://code.google.com/p/chromium/issues/detail?id=2855
2283 // Because this will not tear down the interstitial properly, if "back" is
2284 // back to another tab type, the interstitial will still be somewhat alive
2285 // in the previous tab type. If you navigate somewhere that activates the
2286 // tab with the interstitial again, you'll see a flash before the new load
2287 // commits of the interstitial page.
2288 if (showing_interstitial_page()) {
2289 LOG(WARNING) << "Discarding message during interstitial.";
2290 return;
2291 }
2292
2293 // This will discard our pending entry if we cancelled the load (e.g., if we
2294 // decided to download the file instead of load it). Only discard the
2295 // pending entry if the URLs match, otherwise the user initiated a navigate
2296 // before the page loaded so that the discard would discard the wrong entry.
2297 NavigationEntry* pending_entry = controller_.pending_entry();
2298 if (pending_entry && pending_entry->url() == url) {
2299 controller_.DiscardNonCommittedEntries();
2300 // Update the URL display.
2301 NotifyNavigationStateChanged(TabContents::INVALIDATE_URL);
2302 }
2303
2304 render_manager_.RendererAbortedProvisionalLoad(render_view_host);
2305 }
2306
2307 // Send out a notification that we failed a provisional load with an error.
2308 ProvisionalLoadDetails details(is_main_frame,
2309 controller_.IsURLInPageNavigation(url),
2310 url, std::string(), false, false, frame_id);
2311 details.set_error_code(error_code);
2312
2313 NotificationService::current()->Notify(
2314 NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR,
2315 Source<NavigationController>(&controller_),
2316 Details<ProvisionalLoadDetails>(&details));
2317 }
2318
2319 void TabContents::DocumentLoadedInFrame(int64 frame_id) {
2320 controller_.DocumentLoadedInFrame();
2321 NotificationService::current()->Notify(
2322 NotificationType::FRAME_DOM_CONTENT_LOADED,
2323 Source<NavigationController>(&controller_),
2324 Details<int64>(&frame_id));
2325 }
2326
2327 void TabContents::DidFinishLoad(int64 frame_id) {
2328 NotificationService::current()->Notify(
2329 NotificationType::FRAME_DID_FINISH_LOAD,
2330 Source<NavigationController>(&controller_),
2331 Details<int64>(&frame_id));
2332 }
2333
2334 void TabContents::OnContentSettingsAccessed(bool content_was_blocked) { 2378 void TabContents::OnContentSettingsAccessed(bool content_was_blocked) {
2335 if (delegate_) 2379 if (delegate_)
2336 delegate_->OnContentSettingsChange(this); 2380 delegate_->OnContentSettingsChange(this);
2337 } 2381 }
2338 2382
2339 RenderViewHostDelegate::View* TabContents::GetViewDelegate() { 2383 RenderViewHostDelegate::View* TabContents::GetViewDelegate() {
2340 return view_.get(); 2384 return view_.get();
2341 } 2385 }
2342 2386
2343 RenderViewHostDelegate::RendererManagement* 2387 RenderViewHostDelegate::RendererManagement*
2344 TabContents::GetRendererManagementDelegate() { 2388 TabContents::GetRendererManagementDelegate() {
2345 return &render_manager_; 2389 return &render_manager_;
2346 } 2390 }
2347 2391
2348 RenderViewHostDelegate::BrowserIntegration* 2392 RenderViewHostDelegate::BrowserIntegration*
2349 TabContents::GetBrowserIntegrationDelegate() { 2393 TabContents::GetBrowserIntegrationDelegate() {
2350 return this; 2394 return this;
2351 } 2395 }
2352 2396
2353 RenderViewHostDelegate::Resource* TabContents::GetResourceDelegate() {
2354 return this;
2355 }
2356
2357 RenderViewHostDelegate::ContentSettings* 2397 RenderViewHostDelegate::ContentSettings*
2358 TabContents::GetContentSettingsDelegate() { 2398 TabContents::GetContentSettingsDelegate() {
2359 return content_settings_delegate_.get(); 2399 return content_settings_delegate_.get();
2360 } 2400 }
2361 2401
2362 RenderViewHostDelegate::Save* TabContents::GetSaveDelegate() { 2402 RenderViewHostDelegate::Save* TabContents::GetSaveDelegate() {
2363 return save_package_.get(); // May be NULL, but we can return NULL. 2403 return save_package_.get(); // May be NULL, but we can return NULL.
2364 } 2404 }
2365 2405
2366 RenderViewHostDelegate::Printing* TabContents::GetPrintingDelegate() { 2406 RenderViewHostDelegate::Printing* TabContents::GetPrintingDelegate() {
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
2766 2806
2767 void TabContents::DocumentOnLoadCompletedInMainFrame( 2807 void TabContents::DocumentOnLoadCompletedInMainFrame(
2768 RenderViewHost* render_view_host, 2808 RenderViewHost* render_view_host,
2769 int32 page_id) { 2809 int32 page_id) {
2770 NotificationService::current()->Notify( 2810 NotificationService::current()->Notify(
2771 NotificationType::LOAD_COMPLETED_MAIN_FRAME, 2811 NotificationType::LOAD_COMPLETED_MAIN_FRAME,
2772 Source<TabContents>(this), 2812 Source<TabContents>(this),
2773 Details<int>(&page_id)); 2813 Details<int>(&page_id));
2774 } 2814 }
2775 2815
2776 void TabContents::DidRedirectProvisionalLoad(int32 page_id,
2777 const GURL& source_url,
2778 const GURL& target_url) {
2779 NavigationEntry* entry;
2780 if (page_id == -1)
2781 entry = controller_.pending_entry();
2782 else
2783 entry = controller_.GetEntryWithPageID(GetSiteInstance(), page_id);
2784 if (!entry || entry->url() != source_url)
2785 return;
2786 entry->set_url(target_url);
2787 }
2788
2789 void TabContents::RequestOpenURL(const GURL& url, const GURL& referrer, 2816 void TabContents::RequestOpenURL(const GURL& url, const GURL& referrer,
2790 WindowOpenDisposition disposition) { 2817 WindowOpenDisposition disposition) {
2791 if (render_manager_.dom_ui()) { 2818 if (render_manager_.dom_ui()) {
2792 // When we're a DOM UI, it will provide a page transition type for us (this 2819 // When we're a DOM UI, it will provide a page transition type for us (this
2793 // is so the new tab page can specify AUTO_BOOKMARK for automatically 2820 // is so the new tab page can specify AUTO_BOOKMARK for automatically
2794 // generated suggestions). 2821 // generated suggestions).
2795 // 2822 //
2796 // Note also that we hide the referrer for DOM UI pages. We don't really 2823 // Note also that we hide the referrer for DOM UI pages. We don't really
2797 // want web sites to see a referrer of "chrome://blah" (and some 2824 // want web sites to see a referrer of "chrome://blah" (and some
2798 // chrome: URLs might have search terms or other stuff we don't want to 2825 // chrome: URLs might have search terms or other stuff we don't want to
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
3339 } 3366 }
3340 3367
3341 void TabContents::SwapInRenderViewHost(RenderViewHost* rvh) { 3368 void TabContents::SwapInRenderViewHost(RenderViewHost* rvh) {
3342 render_manager_.SwapInRenderViewHost(rvh); 3369 render_manager_.SwapInRenderViewHost(rvh);
3343 } 3370 }
3344 3371
3345 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { 3372 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) {
3346 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh); 3373 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh);
3347 rwh_view->SetSize(view()->GetContainerSize()); 3374 rwh_view->SetSize(view()->GetContainerSize());
3348 } 3375 }
OLDNEW
« no previous file with comments | « chrome/browser/tab_contents/tab_contents.h ('k') | chrome/common/notification_type.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698