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 #include "chrome/browser/tab_contents/tab_contents.h" | 5 #include "chrome/browser/tab_contents/tab_contents.h" |
6 | 6 |
7 #if defined(OS_CHROMEOS) | 7 #if defined(OS_CHROMEOS) |
8 // For GdkScreen | 8 // For GdkScreen |
9 #include <gdk/gdk.h> | 9 #include <gdk/gdk.h> |
10 #endif // defined(OS_CHROMEOS) | 10 #endif // defined(OS_CHROMEOS) |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 history_requests_(), | 287 history_requests_(), |
288 #if defined(OS_WIN) | 288 #if defined(OS_WIN) |
289 message_box_active_(CreateEvent(NULL, TRUE, FALSE, NULL)), | 289 message_box_active_(CreateEvent(NULL, TRUE, FALSE, NULL)), |
290 #endif | 290 #endif |
291 last_javascript_message_dismissal_(), | 291 last_javascript_message_dismissal_(), |
292 suppress_javascript_messages_(false), | 292 suppress_javascript_messages_(false), |
293 is_showing_before_unload_dialog_(false), | 293 is_showing_before_unload_dialog_(false), |
294 renderer_preferences_(), | 294 renderer_preferences_(), |
295 opener_dom_ui_type_(DOMUIFactory::kNoDOMUI), | 295 opener_dom_ui_type_(DOMUIFactory::kNoDOMUI), |
296 language_state_(&controller_), | 296 language_state_(&controller_), |
297 geolocation_settings_state_(profile), | |
298 closed_by_user_gesture_(false) { | 297 closed_by_user_gesture_(false) { |
299 ClearBlockedContentSettings(); | |
300 renderer_preferences_util::UpdateFromSystemSettings( | 298 renderer_preferences_util::UpdateFromSystemSettings( |
301 &renderer_preferences_, profile); | 299 &renderer_preferences_, profile); |
302 | 300 |
| 301 content_settings_delegate_.reset( |
| 302 new TabSpecificContentSettings(this, profile)); |
| 303 |
303 #if defined(OS_CHROMEOS) | 304 #if defined(OS_CHROMEOS) |
304 // Make sure the thumbnailer is started before starting the render manager. | 305 // Make sure the thumbnailer is started before starting the render manager. |
305 // The thumbnailer will want to listen for RVH creations, one of which will | 306 // The thumbnailer will want to listen for RVH creations, one of which will |
306 // happen in RVHManager::Init. | 307 // happen in RVHManager::Init. |
307 ThumbnailGenerator* generator = g_browser_process->GetThumbnailGenerator(); | 308 ThumbnailGenerator* generator = g_browser_process->GetThumbnailGenerator(); |
308 if (generator) | 309 if (generator) |
309 generator->StartThumbnailing(); | 310 generator->StartThumbnailing(); |
310 #endif | 311 #endif |
311 | 312 |
312 render_manager_.Init(profile, site_instance, routing_id); | 313 render_manager_.Init(profile, site_instance, routing_id); |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 // Always display a throbber during pending loads. | 643 // Always display a throbber during pending loads. |
643 if (controller_.GetLastCommittedEntry() && controller_.pending_entry()) | 644 if (controller_.GetLastCommittedEntry() && controller_.pending_entry()) |
644 return true; | 645 return true; |
645 | 646 |
646 DOMUI* dom_ui = GetDOMUIForCurrentState(); | 647 DOMUI* dom_ui = GetDOMUIForCurrentState(); |
647 if (dom_ui) | 648 if (dom_ui) |
648 return !dom_ui->hide_favicon(); | 649 return !dom_ui->hide_favicon(); |
649 return true; | 650 return true; |
650 } | 651 } |
651 | 652 |
652 bool TabContents::IsContentBlocked(ContentSettingsType content_type) const { | |
653 DCHECK(content_type != CONTENT_SETTINGS_TYPE_GEOLOCATION) | |
654 << "Geolocation settings handled by ContentSettingGeolocationImageModel"; | |
655 DCHECK(content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) | |
656 << "Notifications settings handled by " | |
657 << "ContentSettingsNotificationsImageModel"; | |
658 | |
659 if (content_type == CONTENT_SETTINGS_TYPE_POPUPS) | |
660 return blocked_popups_ != NULL; | |
661 | |
662 if (content_type == CONTENT_SETTINGS_TYPE_IMAGES || | |
663 content_type == CONTENT_SETTINGS_TYPE_JAVASCRIPT || | |
664 content_type == CONTENT_SETTINGS_TYPE_PLUGINS || | |
665 content_type == CONTENT_SETTINGS_TYPE_COOKIES) | |
666 return content_blocked_[content_type]; | |
667 | |
668 NOTREACHED(); | |
669 return false; | |
670 } | |
671 | |
672 std::wstring TabContents::GetStatusText() const { | 653 std::wstring TabContents::GetStatusText() const { |
673 if (!is_loading() || load_state_ == net::LOAD_STATE_IDLE) | 654 if (!is_loading() || load_state_ == net::LOAD_STATE_IDLE) |
674 return std::wstring(); | 655 return std::wstring(); |
675 | 656 |
676 switch (load_state_) { | 657 switch (load_state_) { |
677 case net::LOAD_STATE_WAITING_FOR_CACHE: | 658 case net::LOAD_STATE_WAITING_FOR_CACHE: |
678 return l10n_util::GetString(IDS_LOAD_STATE_WAITING_FOR_CACHE); | 659 return l10n_util::GetString(IDS_LOAD_STATE_WAITING_FOR_CACHE); |
679 case net::LOAD_STATE_ESTABLISHING_PROXY_TUNNEL: | 660 case net::LOAD_STATE_ESTABLISHING_PROXY_TUNNEL: |
680 return l10n_util::GetString(IDS_LOAD_STATE_ESTABLISHING_PROXY_TUNNEL); | 661 return l10n_util::GetString(IDS_LOAD_STATE_ESTABLISHING_PROXY_TUNNEL); |
681 case net::LOAD_STATE_RESOLVING_PROXY_FOR_URL: | 662 case net::LOAD_STATE_RESOLVING_PROXY_FOR_URL: |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
950 return false; | 931 return false; |
951 | 932 |
952 return host->Send(new ViewMsg_ExecuteCode(host->routing_id(), | 933 return host->Send(new ViewMsg_ExecuteCode(host->routing_id(), |
953 ViewMsg_ExecuteCode_Params(request_id, extension_id, host_permissions, | 934 ViewMsg_ExecuteCode_Params(request_id, extension_id, host_permissions, |
954 is_js_code, code_string, all_frames))); | 935 is_js_code, code_string, all_frames))); |
955 } | 936 } |
956 | 937 |
957 void TabContents::PopupNotificationVisibilityChanged(bool visible) { | 938 void TabContents::PopupNotificationVisibilityChanged(bool visible) { |
958 if (is_being_destroyed_) | 939 if (is_being_destroyed_) |
959 return; | 940 return; |
| 941 content_settings_delegate_->SetPopupsBlocked(visible); |
960 if (!dont_notify_render_view_) | 942 if (!dont_notify_render_view_) |
961 render_view_host()->AllowScriptToClose(!visible); | 943 render_view_host()->AllowScriptToClose(!visible); |
962 if (delegate_) | |
963 delegate_->OnContentSettingsChange(this); | |
964 } | 944 } |
965 | 945 |
966 gfx::NativeView TabContents::GetContentNativeView() const { | 946 gfx::NativeView TabContents::GetContentNativeView() const { |
967 return view_->GetContentNativeView(); | 947 return view_->GetContentNativeView(); |
968 } | 948 } |
969 | 949 |
970 gfx::NativeView TabContents::GetNativeView() const { | 950 gfx::NativeView TabContents::GetNativeView() const { |
971 return view_->GetNativeView(); | 951 return view_->GetNativeView(); |
972 } | 952 } |
973 | 953 |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1387 new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL); | 1367 new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL); |
1388 new_contents->SetExtensionApp(extension_app_); | 1368 new_contents->SetExtensionApp(extension_app_); |
1389 new_contents->controller().RestoreFromState(navigations, 0, false); | 1369 new_contents->controller().RestoreFromState(navigations, 0, false); |
1390 | 1370 |
1391 if (!extension_app_ && entry) | 1371 if (!extension_app_ && entry) |
1392 new_contents->controller().GetActiveEntry()->favicon() = entry->favicon(); | 1372 new_contents->controller().GetActiveEntry()->favicon() = entry->favicon(); |
1393 | 1373 |
1394 return new_contents; | 1374 return new_contents; |
1395 } | 1375 } |
1396 | 1376 |
1397 // Resets the |content_blocked_| array. | |
1398 void TabContents::ClearBlockedContentSettings() { | |
1399 for (size_t i = 0; i < arraysize(content_blocked_); ++i) | |
1400 content_blocked_[i] = false; | |
1401 } | |
1402 | |
1403 // Notifies the RenderWidgetHost instance about the fact that the page is | 1377 // Notifies the RenderWidgetHost instance about the fact that the page is |
1404 // loading, or done loading and calls the base implementation. | 1378 // loading, or done loading and calls the base implementation. |
1405 void TabContents::SetIsLoading(bool is_loading, | 1379 void TabContents::SetIsLoading(bool is_loading, |
1406 LoadNotificationDetails* details) { | 1380 LoadNotificationDetails* details) { |
1407 if (is_loading == is_loading_) | 1381 if (is_loading == is_loading_) |
1408 return; | 1382 return; |
1409 | 1383 |
1410 if (!is_loading) { | 1384 if (!is_loading) { |
1411 load_state_ = net::LOAD_STATE_IDLE; | 1385 load_state_ = net::LOAD_STATE_IDLE; |
1412 load_state_host_.clear(); | 1386 load_state_host_.clear(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 GURL creator = entry ? entry->virtual_url() : GURL::EmptyGURL(); | 1420 GURL creator = entry ? entry->virtual_url() : GURL::EmptyGURL(); |
1447 | 1421 |
1448 if (creator.is_valid() && | 1422 if (creator.is_valid() && |
1449 profile()->GetHostContentSettingsMap()->GetContentSetting( | 1423 profile()->GetHostContentSettingsMap()->GetContentSetting( |
1450 creator, CONTENT_SETTINGS_TYPE_POPUPS) == CONTENT_SETTING_ALLOW) { | 1424 creator, CONTENT_SETTINGS_TYPE_POPUPS) == CONTENT_SETTING_ALLOW) { |
1451 AddNewContents(new_contents, NEW_POPUP, initial_pos, true); | 1425 AddNewContents(new_contents, NEW_POPUP, initial_pos, true); |
1452 } else { | 1426 } else { |
1453 if (!blocked_popups_) | 1427 if (!blocked_popups_) |
1454 blocked_popups_ = new BlockedPopupContainer(this); | 1428 blocked_popups_ = new BlockedPopupContainer(this); |
1455 blocked_popups_->AddTabContents(new_contents, initial_pos); | 1429 blocked_popups_->AddTabContents(new_contents, initial_pos); |
| 1430 content_settings_delegate_->OnContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS); |
1456 } | 1431 } |
1457 } | 1432 } |
1458 | 1433 |
1459 namespace { | 1434 namespace { |
1460 bool TransitionIsReload(PageTransition::Type transition) { | 1435 bool TransitionIsReload(PageTransition::Type transition) { |
1461 return PageTransition::StripQualifier(transition) == PageTransition::RELOAD; | 1436 return PageTransition::StripQualifier(transition) == PageTransition::RELOAD; |
1462 } | 1437 } |
1463 } | 1438 } |
1464 | 1439 |
1465 void TabContents::ExpireInfoBars( | 1440 void TabContents::ExpireInfoBars( |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1588 } | 1563 } |
1589 | 1564 |
1590 // Close blocked popups. | 1565 // Close blocked popups. |
1591 if (blocked_popups_) { | 1566 if (blocked_popups_) { |
1592 AutoReset<bool> auto_reset(&dont_notify_render_view_, true); | 1567 AutoReset<bool> auto_reset(&dont_notify_render_view_, true); |
1593 blocked_popups_->Destroy(); | 1568 blocked_popups_->Destroy(); |
1594 blocked_popups_ = NULL; | 1569 blocked_popups_ = NULL; |
1595 } | 1570 } |
1596 | 1571 |
1597 // Clear "blocked" flags. | 1572 // Clear "blocked" flags. |
1598 ClearBlockedContentSettings(); | 1573 content_settings_delegate_->ClearBlockedContentSettings(); |
1599 geolocation_settings_state_.DidNavigate(details); | 1574 content_settings_delegate_->GeolocationDidNavigate(details); |
1600 if (delegate_) | |
1601 delegate_->OnContentSettingsChange(this); | |
1602 | 1575 |
1603 // Once the main frame is navigated, we're no longer considered to have | 1576 // Once the main frame is navigated, we're no longer considered to have |
1604 // displayed insecure content. | 1577 // displayed insecure content. |
1605 displayed_insecure_content_ = false; | 1578 displayed_insecure_content_ = false; |
1606 } | 1579 } |
1607 | 1580 |
1608 // Close constrained windows if necessary. | 1581 // Close constrained windows if necessary. |
1609 if (!net::RegistryControlledDomainService::SameDomainOrHost( | 1582 if (!net::RegistryControlledDomainService::SameDomainOrHost( |
1610 details.previous_url, details.entry->url())) | 1583 details.previous_url, details.entry->url())) |
1611 CloseConstrainedWindows(); | 1584 CloseConstrainedWindows(); |
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2131 NotificationService::current()->Notify( | 2104 NotificationService::current()->Notify( |
2132 NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR, | 2105 NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR, |
2133 Source<NavigationController>(&controller_), | 2106 Source<NavigationController>(&controller_), |
2134 Details<ProvisionalLoadDetails>(&details)); | 2107 Details<ProvisionalLoadDetails>(&details)); |
2135 } | 2108 } |
2136 | 2109 |
2137 void TabContents::DocumentLoadedInFrame() { | 2110 void TabContents::DocumentLoadedInFrame() { |
2138 controller_.DocumentLoadedInFrame(); | 2111 controller_.DocumentLoadedInFrame(); |
2139 } | 2112 } |
2140 | 2113 |
2141 void TabContents::OnContentBlocked(ContentSettingsType type) { | 2114 void TabContents::OnContentSettingsChange() { |
2142 DCHECK(type != CONTENT_SETTINGS_TYPE_GEOLOCATION) | |
2143 << "Geolocation settings handled by OnGeolocationPermissionSet"; | |
2144 content_blocked_[type] = true; | |
2145 if (delegate_) | 2115 if (delegate_) |
2146 delegate_->OnContentSettingsChange(this); | 2116 delegate_->OnContentSettingsChange(this); |
2147 } | 2117 } |
2148 | |
2149 void TabContents::OnGeolocationPermissionSet(const GURL& requesting_origin, | |
2150 bool allowed) { | |
2151 geolocation_settings_state_.OnGeolocationPermissionSet(requesting_origin, | |
2152 allowed); | |
2153 if (delegate_) | |
2154 delegate_->OnContentSettingsChange(this); | |
2155 } | |
2156 | 2118 |
2157 RenderViewHostDelegate::View* TabContents::GetViewDelegate() { | 2119 RenderViewHostDelegate::View* TabContents::GetViewDelegate() { |
2158 return view_.get(); | 2120 return view_.get(); |
2159 } | 2121 } |
2160 | 2122 |
2161 RenderViewHostDelegate::RendererManagement* | 2123 RenderViewHostDelegate::RendererManagement* |
2162 TabContents::GetRendererManagementDelegate() { | 2124 TabContents::GetRendererManagementDelegate() { |
2163 return &render_manager_; | 2125 return &render_manager_; |
2164 } | 2126 } |
2165 | 2127 |
2166 RenderViewHostDelegate::BrowserIntegration* | 2128 RenderViewHostDelegate::BrowserIntegration* |
2167 TabContents::GetBrowserIntegrationDelegate() { | 2129 TabContents::GetBrowserIntegrationDelegate() { |
2168 return this; | 2130 return this; |
2169 } | 2131 } |
2170 | 2132 |
2171 RenderViewHostDelegate::Resource* TabContents::GetResourceDelegate() { | 2133 RenderViewHostDelegate::Resource* TabContents::GetResourceDelegate() { |
2172 return this; | 2134 return this; |
2173 } | 2135 } |
2174 | 2136 |
2175 RenderViewHostDelegate::ContentSettings* | 2137 RenderViewHostDelegate::ContentSettings* |
2176 TabContents::GetContentSettingsDelegate() { | 2138 TabContents::GetContentSettingsDelegate() { |
2177 return this; | 2139 return content_settings_delegate_.get(); |
2178 } | 2140 } |
2179 | 2141 |
2180 RenderViewHostDelegate::Save* TabContents::GetSaveDelegate() { | 2142 RenderViewHostDelegate::Save* TabContents::GetSaveDelegate() { |
2181 return save_package_.get(); // May be NULL, but we can return NULL. | 2143 return save_package_.get(); // May be NULL, but we can return NULL. |
2182 } | 2144 } |
2183 | 2145 |
2184 RenderViewHostDelegate::Printing* TabContents::GetPrintingDelegate() { | 2146 RenderViewHostDelegate::Printing* TabContents::GetPrintingDelegate() { |
2185 return &printing_; | 2147 return &printing_; |
2186 } | 2148 } |
2187 | 2149 |
(...skipping 18 matching lines...) Expand all Loading... |
2206 | 2168 |
2207 RenderViewHostDelegate::BookmarkDrag* TabContents::GetBookmarkDragDelegate() { | 2169 RenderViewHostDelegate::BookmarkDrag* TabContents::GetBookmarkDragDelegate() { |
2208 return bookmark_drag_; | 2170 return bookmark_drag_; |
2209 } | 2171 } |
2210 | 2172 |
2211 void TabContents::SetBookmarkDragDelegate( | 2173 void TabContents::SetBookmarkDragDelegate( |
2212 RenderViewHostDelegate::BookmarkDrag* bookmark_drag) { | 2174 RenderViewHostDelegate::BookmarkDrag* bookmark_drag) { |
2213 bookmark_drag_ = bookmark_drag; | 2175 bookmark_drag_ = bookmark_drag; |
2214 } | 2176 } |
2215 | 2177 |
| 2178 TabSpecificContentSettings* TabContents::GetTabSpecificContentSettings() const { |
| 2179 return content_settings_delegate_.get(); |
| 2180 } |
| 2181 |
2216 RendererPreferences TabContents::GetRendererPrefs(Profile* profile) const { | 2182 RendererPreferences TabContents::GetRendererPrefs(Profile* profile) const { |
2217 return renderer_preferences_; | 2183 return renderer_preferences_; |
2218 } | 2184 } |
2219 | 2185 |
2220 TabContents* TabContents::GetAsTabContents() { | 2186 TabContents* TabContents::GetAsTabContents() { |
2221 return this; | 2187 return this; |
2222 } | 2188 } |
2223 | 2189 |
2224 ViewType::Type TabContents::GetRenderViewType() const { | 2190 ViewType::Type TabContents::GetRenderViewType() const { |
2225 return ViewType::TAB_CONTENTS; | 2191 return ViewType::TAB_CONTENTS; |
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3181 AddInfoBar(new SavePasswordInfoBarDelegate(this, form_to_save)); | 3147 AddInfoBar(new SavePasswordInfoBarDelegate(this, form_to_save)); |
3182 } | 3148 } |
3183 | 3149 |
3184 Profile* TabContents::GetProfileForPasswordManager() { | 3150 Profile* TabContents::GetProfileForPasswordManager() { |
3185 return profile(); | 3151 return profile(); |
3186 } | 3152 } |
3187 | 3153 |
3188 bool TabContents::DidLastPageLoadEncounterSSLErrors() { | 3154 bool TabContents::DidLastPageLoadEncounterSSLErrors() { |
3189 return controller().ssl_manager()->ProcessedSSLErrorFromRequest(); | 3155 return controller().ssl_manager()->ProcessedSSLErrorFromRequest(); |
3190 } | 3156 } |
OLD | NEW |