| 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/renderer/render_view.h" | 5 #include "chrome/renderer/render_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "app/l10n_util.h" | 12 #include "app/l10n_util.h" |
| 13 #include "app/message_box_flags.h" | 13 #include "app/message_box_flags.h" |
| 14 #include "app/resource_bundle.h" | 14 #include "app/resource_bundle.h" |
| 15 #include "base/callback.h" | 15 #include "base/callback.h" |
| 16 #include "base/command_line.h" | 16 #include "base/command_line.h" |
| 17 #include "base/compiler_specific.h" | 17 #include "base/compiler_specific.h" |
| 18 #include "base/lazy_instance.h" |
| 18 #include "base/metrics/histogram.h" | 19 #include "base/metrics/histogram.h" |
| 19 #include "base/path_service.h" | 20 #include "base/path_service.h" |
| 20 #include "base/process_util.h" | 21 #include "base/process_util.h" |
| 21 #include "base/singleton.h" | |
| 22 #include "base/string_piece.h" | 22 #include "base/string_piece.h" |
| 23 #include "base/string_util.h" | 23 #include "base/string_util.h" |
| 24 #include "base/sys_string_conversions.h" | 24 #include "base/sys_string_conversions.h" |
| 25 #include "base/time.h" | 25 #include "base/time.h" |
| 26 #include "base/utf_string_conversions.h" | 26 #include "base/utf_string_conversions.h" |
| 27 #include "build/build_config.h" | 27 #include "build/build_config.h" |
| 28 #include "chrome/common/appcache/appcache_dispatcher.h" | 28 #include "chrome/common/appcache/appcache_dispatcher.h" |
| 29 #include "chrome/common/bindings_policy.h" | 29 #include "chrome/common/bindings_policy.h" |
| 30 #include "chrome/common/child_process_logging.h" | 30 #include "chrome/common/child_process_logging.h" |
| 31 #include "chrome/common/chrome_constants.h" | 31 #include "chrome/common/chrome_constants.h" |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 using webkit_glue::ImageResourceFetcher; | 270 using webkit_glue::ImageResourceFetcher; |
| 271 using webkit_glue::PasswordForm; | 271 using webkit_glue::PasswordForm; |
| 272 using webkit_glue::PasswordFormDomManager; | 272 using webkit_glue::PasswordFormDomManager; |
| 273 using webkit_glue::ResourceFetcher; | 273 using webkit_glue::ResourceFetcher; |
| 274 using webkit_glue::SiteIsolationMetrics; | 274 using webkit_glue::SiteIsolationMetrics; |
| 275 using webkit_glue::WebAccessibility; | 275 using webkit_glue::WebAccessibility; |
| 276 | 276 |
| 277 //----------------------------------------------------------------------------- | 277 //----------------------------------------------------------------------------- |
| 278 | 278 |
| 279 typedef std::map<WebKit::WebView*, RenderView*> ViewMap; | 279 typedef std::map<WebKit::WebView*, RenderView*> ViewMap; |
| 280 static base::LazyInstance<ViewMap> g_view_map(base::LINKER_INITIALIZED); |
| 280 | 281 |
| 281 // define to write the time necessary for thumbnail/DOM text retrieval, | 282 // define to write the time necessary for thumbnail/DOM text retrieval, |
| 282 // respectively, into the system debug log | 283 // respectively, into the system debug log |
| 283 // #define TIME_TEXT_RETRIEVAL | 284 // #define TIME_TEXT_RETRIEVAL |
| 284 | 285 |
| 285 // maximum number of characters in the document to index, any text beyond this | 286 // maximum number of characters in the document to index, any text beyond this |
| 286 // point will be clipped | 287 // point will be clipped |
| 287 static const size_t kMaxIndexChars = 65535; | 288 static const size_t kMaxIndexChars = 65535; |
| 288 | 289 |
| 289 // Size of the thumbnails that we'll generate | 290 // Size of the thumbnails that we'll generate |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 #endif | 609 #endif |
| 609 | 610 |
| 610 render_thread_->RemoveFilter(audio_message_filter_); | 611 render_thread_->RemoveFilter(audio_message_filter_); |
| 611 | 612 |
| 612 // Tell the PhishingClassifierDelegate that the view is going away. | 613 // Tell the PhishingClassifierDelegate that the view is going away. |
| 613 if (phishing_delegate_.get()) | 614 if (phishing_delegate_.get()) |
| 614 phishing_delegate_->CancelPendingClassification(); | 615 phishing_delegate_->CancelPendingClassification(); |
| 615 | 616 |
| 616 #ifndef NDEBUG | 617 #ifndef NDEBUG |
| 617 // Make sure we are no longer referenced by the ViewMap. | 618 // Make sure we are no longer referenced by the ViewMap. |
| 618 ViewMap* views = Singleton<ViewMap>::get(); | 619 ViewMap* views = g_view_map.Pointer(); |
| 619 for (ViewMap::iterator it = views->begin(); it != views->end(); ++it) | 620 for (ViewMap::iterator it = views->begin(); it != views->end(); ++it) |
| 620 DCHECK_NE(this, it->second) << "Failed to call Close?"; | 621 DCHECK_NE(this, it->second) << "Failed to call Close?"; |
| 621 #endif | 622 #endif |
| 622 } | 623 } |
| 623 | 624 |
| 624 /*static*/ | 625 /*static*/ |
| 625 void RenderView::ForEach(RenderViewVisitor* visitor) { | 626 void RenderView::ForEach(RenderViewVisitor* visitor) { |
| 626 ViewMap* views = Singleton<ViewMap>::get(); | 627 ViewMap* views = g_view_map.Pointer(); |
| 627 for (ViewMap::iterator it = views->begin(); it != views->end(); ++it) { | 628 for (ViewMap::iterator it = views->begin(); it != views->end(); ++it) { |
| 628 if (!visitor->Visit(it->second)) | 629 if (!visitor->Visit(it->second)) |
| 629 return; | 630 return; |
| 630 } | 631 } |
| 631 } | 632 } |
| 632 | 633 |
| 633 /*static*/ | 634 /*static*/ |
| 634 RenderView* RenderView::FromWebView(WebView* webview) { | 635 RenderView* RenderView::FromWebView(WebView* webview) { |
| 635 ViewMap* views = Singleton<ViewMap>::get(); | 636 ViewMap* views = g_view_map.Pointer(); |
| 636 ViewMap::iterator it = views->find(webview); | 637 ViewMap::iterator it = views->find(webview); |
| 637 return it == views->end() ? NULL : it->second; | 638 return it == views->end() ? NULL : it->second; |
| 638 } | 639 } |
| 639 | 640 |
| 640 /*static*/ | 641 /*static*/ |
| 641 RenderView* RenderView::Create( | 642 RenderView* RenderView::Create( |
| 642 RenderThreadBase* render_thread, | 643 RenderThreadBase* render_thread, |
| 643 gfx::NativeViewId parent_hwnd, | 644 gfx::NativeViewId parent_hwnd, |
| 644 int32 opener_id, | 645 int32 opener_id, |
| 645 const RendererPreferences& renderer_prefs, | 646 const RendererPreferences& renderer_prefs, |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 shared_popup_counter_->data++; | 889 shared_popup_counter_->data++; |
| 889 decrement_shared_popup_at_destruction_ = true; | 890 decrement_shared_popup_at_destruction_ = true; |
| 890 } else { | 891 } else { |
| 891 shared_popup_counter_ = new SharedRenderViewCounter(0); | 892 shared_popup_counter_ = new SharedRenderViewCounter(0); |
| 892 decrement_shared_popup_at_destruction_ = false; | 893 decrement_shared_popup_at_destruction_ = false; |
| 893 } | 894 } |
| 894 | 895 |
| 895 devtools_agent_.reset(new DevToolsAgent(routing_id, this)); | 896 devtools_agent_.reset(new DevToolsAgent(routing_id, this)); |
| 896 | 897 |
| 897 webwidget_ = WebView::create(this, devtools_agent_.get()); | 898 webwidget_ = WebView::create(this, devtools_agent_.get()); |
| 898 Singleton<ViewMap>::get()->insert(std::make_pair(webview(), this)); | 899 g_view_map.Get().insert(std::make_pair(webview(), this)); |
| 899 webkit_preferences_.Apply(webview()); | 900 webkit_preferences_.Apply(webview()); |
| 900 webview()->initializeMainFrame(this); | 901 webview()->initializeMainFrame(this); |
| 901 if (!frame_name.empty()) | 902 if (!frame_name.empty()) |
| 902 webview()->mainFrame()->setName(frame_name); | 903 webview()->mainFrame()->setName(frame_name); |
| 903 | 904 |
| 904 OnSetRendererPrefs(renderer_prefs); | 905 OnSetRendererPrefs(renderer_prefs); |
| 905 | 906 |
| 906 routing_id_ = routing_id; | 907 routing_id_ = routing_id; |
| 907 render_thread_->AddRoute(routing_id_, this); | 908 render_thread_->AddRoute(routing_id_, this); |
| 908 // Take a reference on behalf of the RenderThread. This will be balanced | 909 // Take a reference on behalf of the RenderThread. This will be balanced |
| (...skipping 4531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5440 } | 5441 } |
| 5441 } | 5442 } |
| 5442 | 5443 |
| 5443 Send(new ViewMsg_ExecuteCodeFinished(routing_id_, params.request_id, true)); | 5444 Send(new ViewMsg_ExecuteCodeFinished(routing_id_, params.request_id, true)); |
| 5444 } | 5445 } |
| 5445 | 5446 |
| 5446 void RenderView::Close() { | 5447 void RenderView::Close() { |
| 5447 // We need to grab a pointer to the doomed WebView before we destroy it. | 5448 // We need to grab a pointer to the doomed WebView before we destroy it. |
| 5448 WebView* doomed = webview(); | 5449 WebView* doomed = webview(); |
| 5449 RenderWidget::Close(); | 5450 RenderWidget::Close(); |
| 5450 Singleton<ViewMap>::get()->erase(doomed); | 5451 g_view_map.Get().erase(doomed); |
| 5451 } | 5452 } |
| 5452 | 5453 |
| 5453 void RenderView::DidHandleKeyEvent() { | 5454 void RenderView::DidHandleKeyEvent() { |
| 5454 edit_commands_.clear(); | 5455 edit_commands_.clear(); |
| 5455 } | 5456 } |
| 5456 | 5457 |
| 5457 void RenderView::DidHandleMouseEvent(const WebKit::WebMouseEvent& event) { | 5458 void RenderView::DidHandleMouseEvent(const WebKit::WebMouseEvent& event) { |
| 5458 page_click_tracker_->DidHandleMouseEvent(event); | 5459 page_click_tracker_->DidHandleMouseEvent(event); |
| 5459 } | 5460 } |
| 5460 | 5461 |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5731 external_popup_menu_.reset(); | 5732 external_popup_menu_.reset(); |
| 5732 } | 5733 } |
| 5733 #endif | 5734 #endif |
| 5734 | 5735 |
| 5735 void RenderView::AddErrorToRootConsole(const string16& message) { | 5736 void RenderView::AddErrorToRootConsole(const string16& message) { |
| 5736 if (webview() && webview()->mainFrame()) { | 5737 if (webview() && webview()->mainFrame()) { |
| 5737 webview()->mainFrame()->addMessageToConsole( | 5738 webview()->mainFrame()->addMessageToConsole( |
| 5738 WebConsoleMessage(WebConsoleMessage::LevelError, message)); | 5739 WebConsoleMessage(WebConsoleMessage::LevelError, message)); |
| 5739 } | 5740 } |
| 5740 } | 5741 } |
| OLD | NEW |