| Index: content/renderer/render_view.cc
|
| ===================================================================
|
| --- content/renderer/render_view.cc (revision 81801)
|
| +++ content/renderer/render_view.cc (working copy)
|
| @@ -21,25 +21,16 @@
|
| #include "base/sys_string_conversions.h"
|
| #include "base/time.h"
|
| #include "base/utf_string_conversions.h"
|
| -#include "chrome/common/autofill_messages.h"
|
| #include "chrome/common/bindings_policy.h"
|
| -#include "chrome/common/child_process_logging.h"
|
| #include "chrome/common/chrome_constants.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/extensions/extension_messages.h"
|
| -#include "chrome/common/json_value_serializer.h"
|
| #include "chrome/common/pepper_plugin_registry.h"
|
| #include "chrome/common/render_messages.h"
|
| -#include "chrome/common/render_view_commands.h"
|
| #include "chrome/common/url_constants.h"
|
| -#include "chrome/common/web_apps.h"
|
| -#include "chrome/renderer/about_handler.h"
|
| #include "chrome/renderer/automation/dom_automation_controller.h"
|
| #include "chrome/renderer/external_host_bindings.h"
|
| #include "chrome/renderer/localized_error.h"
|
| -#include "chrome/renderer/searchbox.h"
|
| -#include "chrome/renderer/visitedlink_slave.h"
|
| #include "content/common/appcache/appcache_dispatcher.h"
|
| #include "content/common/clipboard_messages.h"
|
| #include "content/common/content_constants.h"
|
| @@ -147,7 +138,6 @@
|
| #include "webkit/glue/image_resource_fetcher.h"
|
| #include "webkit/glue/media/video_renderer_impl.h"
|
| #include "webkit/glue/password_form_dom_manager.h"
|
| -#include "webkit/glue/resource_fetcher.h"
|
| #include "webkit/glue/site_isolation_metrics.h"
|
| #include "webkit/glue/webaccessibility.h"
|
| #include "webkit/glue/webdropdata.h"
|
| @@ -308,21 +298,6 @@
|
| return false;
|
| }
|
|
|
| -// Returns true if the parameter node is a textfield, text area or a content
|
| -// editable div.
|
| -static bool IsEditableNode(const WebNode& node) {
|
| - bool is_editable_node = false;
|
| - if (!node.isNull()) {
|
| - if (node.isContentEditable()) {
|
| - is_editable_node = true;
|
| - } else if (node.isElementNode()) {
|
| - is_editable_node =
|
| - node.toConst<WebElement>().isTextFormControlElement();
|
| - }
|
| - }
|
| - return is_editable_node;
|
| -}
|
| -
|
| static bool WebAccessibilityNotificationToViewHostMsg(
|
| WebAccessibilityNotification notification,
|
| ViewHostMsg_AccessibilityNotification_Type::Value* type) {
|
| @@ -441,7 +416,6 @@
|
| device_orientation_dispatcher_(NULL),
|
| accessibility_ack_pending_(false),
|
| p2p_socket_dispatcher_(NULL),
|
| - pending_app_icon_requests_(0),
|
| session_storage_namespace_id_(session_storage_namespace_id) {
|
|
|
| ClearBlockedContentSettings();
|
| @@ -616,52 +590,6 @@
|
| Send(new ViewHostMsg_UserMetricsRecordAction(action));
|
| }
|
|
|
| -bool RenderView::InstallWebApplicationUsingDefinitionFile(WebFrame* frame,
|
| - string16* error) {
|
| - // There is an issue of drive-by installs with the below implementation. A web
|
| - // site could force a user to install an app by timing the dialog to come up
|
| - // just before the user clicks.
|
| - //
|
| - // We do show a success UI that allows users to uninstall, but it seems that
|
| - // we might still want to put up an infobar before showing the install dialog.
|
| - //
|
| - // TODO(aa): Figure out this issue before removing the kEnableCrxlessWebApps
|
| - // switch.
|
| - if (!CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kEnableCrxlessWebApps)) {
|
| - *error = ASCIIToUTF16("CRX-less web apps aren't enabled.");
|
| - return false;
|
| - }
|
| -
|
| - if (frame != frame->top()) {
|
| - *error = ASCIIToUTF16("Applications can only be installed from the top "
|
| - "frame.");
|
| - return false;
|
| - }
|
| -
|
| - if (pending_app_info_.get()) {
|
| - *error = ASCIIToUTF16("An application install is already in progress.");
|
| - return false;
|
| - }
|
| -
|
| - pending_app_info_.reset(new WebApplicationInfo());
|
| - if (!web_apps::ParseWebAppFromWebDocument(frame, pending_app_info_.get(),
|
| - error)) {
|
| - return false;
|
| - }
|
| -
|
| - if (!pending_app_info_->manifest_url.is_valid()) {
|
| - *error = ASCIIToUTF16("Web application definition not found or invalid.");
|
| - return false;
|
| - }
|
| -
|
| - app_definition_fetcher_.reset(new ResourceFetcher(
|
| - pending_app_info_->manifest_url, webview()->mainFrame(),
|
| - WebURLRequest::TargetIsSubresource,
|
| - NewCallback(this, &RenderView::DidDownloadApplicationDefinition)));
|
| - return true;
|
| -}
|
| -
|
| void RenderView::SetReportLoadProgressEnabled(bool enabled) {
|
| if (!enabled) {
|
| load_progress_tracker_.reset(NULL);
|
| @@ -671,97 +599,6 @@
|
| load_progress_tracker_.reset(new LoadProgressTracker(this));
|
| }
|
|
|
| -void RenderView::DidDownloadApplicationDefinition(
|
| - const WebKit::WebURLResponse& response,
|
| - const std::string& data) {
|
| - scoped_ptr<WebApplicationInfo> app_info(
|
| - pending_app_info_.release());
|
| -
|
| - JSONStringValueSerializer serializer(data);
|
| - int error_code = 0;
|
| - std::string error_message;
|
| - scoped_ptr<Value> result(serializer.Deserialize(&error_code, &error_message));
|
| - if (!result.get()) {
|
| - AddErrorToRootConsole(UTF8ToUTF16(error_message));
|
| - return;
|
| - }
|
| -
|
| - string16 error_message_16;
|
| - if (!web_apps::ParseWebAppFromDefinitionFile(result.get(), app_info.get(),
|
| - &error_message_16)) {
|
| - AddErrorToRootConsole(error_message_16);
|
| - return;
|
| - }
|
| -
|
| - if (!app_info->icons.empty()) {
|
| - pending_app_info_.reset(app_info.release());
|
| - pending_app_icon_requests_ =
|
| - static_cast<int>(pending_app_info_->icons.size());
|
| - for (size_t i = 0; i < pending_app_info_->icons.size(); ++i) {
|
| - app_icon_fetchers_.push_back(linked_ptr<ImageResourceFetcher>(
|
| - new ImageResourceFetcher(
|
| - pending_app_info_->icons[i].url,
|
| - webview()->mainFrame(),
|
| - static_cast<int>(i),
|
| - pending_app_info_->icons[i].width,
|
| - WebURLRequest::TargetIsFavicon,
|
| - NewCallback(this, &RenderView::DidDownloadApplicationIcon))));
|
| - }
|
| - } else {
|
| - Send(new ExtensionHostMsg_InstallApplication(routing_id_, *app_info));
|
| - }
|
| -}
|
| -
|
| -void RenderView::DidDownloadApplicationIcon(ImageResourceFetcher* fetcher,
|
| - const SkBitmap& image) {
|
| - pending_app_info_->icons[fetcher->id()].data = image;
|
| -
|
| - // Remove the image fetcher from our pending list. We're in the callback from
|
| - // ImageResourceFetcher, best to delay deletion.
|
| - for (ImageResourceFetcherList::iterator iter = app_icon_fetchers_.begin();
|
| - iter != app_icon_fetchers_.end(); ++iter) {
|
| - if (iter->get() == fetcher) {
|
| - iter->release();
|
| - app_icon_fetchers_.erase(iter);
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // We're in the callback from the ImageResourceFetcher, best to delay
|
| - // deletion.
|
| - MessageLoop::current()->DeleteSoon(FROM_HERE, fetcher);
|
| -
|
| - if (--pending_app_icon_requests_ > 0)
|
| - return;
|
| -
|
| - // There is a maximum size of IPC on OS X and Linux that we have run into in
|
| - // some situations. We're not sure what it is, but our hypothesis is in the
|
| - // neighborhood of 1 MB.
|
| - //
|
| - // To be on the safe side, we give ourselves 128 KB for just the image data.
|
| - // This should be more than enough for 128, 48, and 16 px 32-bit icons. If we
|
| - // want to start allowing larger icons (see bug 63406), we'll have to either
|
| - // experiment mor ewith this and find the real limit, or else come up with
|
| - // some alternative way to transmit the icon data to the browser process.
|
| - //
|
| - // See also: bug 63729.
|
| - const size_t kMaxIconSize = 1024 * 128;
|
| - size_t actual_icon_size = 0;
|
| - for (size_t i = 0; i < pending_app_info_->icons.size(); ++i) {
|
| - size_t current_size = pending_app_info_->icons[i].data.getSize();
|
| - if (current_size > kMaxIconSize - actual_icon_size) {
|
| - AddErrorToRootConsole(ASCIIToUTF16(
|
| - "Icons are too large. Maximum total size for app icons is 128 KB."));
|
| - return;
|
| - }
|
| - actual_icon_size += current_size;
|
| - }
|
| -
|
| - Send(new ExtensionHostMsg_InstallApplication(
|
| - routing_id_, *pending_app_info_));
|
| - pending_app_info_.reset(NULL);
|
| -}
|
| -
|
| void RenderView::PluginCrashed(const FilePath& plugin_path) {
|
| Send(new ViewHostMsg_CrashedPlugin(routing_id_, plugin_path));
|
| }
|
| @@ -813,7 +650,7 @@
|
| bool RenderView::OnMessageReceived(const IPC::Message& message) {
|
| WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL;
|
| if (main_frame)
|
| - child_process_logging::SetActiveURL(main_frame->url());
|
| + content::GetContentClient()->SetActiveURL(main_frame->url());
|
|
|
| ObserverListBase<RenderViewObserver>::Iterator it(observers_);
|
| RenderViewObserver* observer;
|
| @@ -882,7 +719,6 @@
|
| IPC_MESSAGE_HANDLER(
|
| ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks,
|
| OnGetSerializedHtmlDataForCurrentPageWithLocalLinks)
|
| - IPC_MESSAGE_HANDLER(ExtensionMsg_GetApplicationInfo, OnGetApplicationInfo)
|
| IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose)
|
| IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage)
|
| IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged)
|
| @@ -950,10 +786,8 @@
|
| history_list_offset_ = params.current_history_list_offset;
|
| history_list_length_ = params.current_history_list_length;
|
|
|
| - child_process_logging::SetActiveURL(params.url);
|
| + content::GetContentClient()->SetActiveURL(params.url);
|
|
|
| - AboutHandler::MaybeHandle(params.url);
|
| -
|
| bool is_reload =
|
| params.navigation_type == ViewMsg_Navigate_Type::RELOAD ||
|
| params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE;
|
| @@ -1982,27 +1816,6 @@
|
| }
|
| }
|
|
|
| -void RenderView::UpdateToggleSpellCheckCommandState() {
|
| - bool is_enabled = false;
|
| - WebKit::WebNode node = GetFocusedNode();
|
| - if (!node.isNull())
|
| - is_enabled = IsEditableNode(node);
|
| -
|
| - RenderViewCommandCheckedState checked_state =
|
| - RENDER_VIEW_COMMAND_CHECKED_STATE_UNCHECKED;
|
| - if (is_enabled && webview()) {
|
| - WebFrame* frame = webview()->focusedFrame();
|
| - if (frame->isContinuousSpellCheckingEnabled())
|
| - checked_state = RENDER_VIEW_COMMAND_CHECKED_STATE_CHECKED;
|
| - }
|
| -
|
| - Send(new ViewHostMsg_CommandStateChanged(
|
| - routing_id_,
|
| - RENDER_VIEW_COMMAND_TOGGLE_SPELL_CHECK,
|
| - is_enabled,
|
| - checked_state));
|
| -}
|
| -
|
| void RenderView::StartNavStateSyncTimerIfNecessary() {
|
| int delay;
|
| if (send_content_state_immediately_)
|
| @@ -2080,7 +1893,7 @@
|
| WebKit::WebAccessibilityNotificationFocusedUIElementChanged);
|
| }
|
|
|
| - UpdateToggleSpellCheckCommandState();
|
| + FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node));
|
| }
|
|
|
| void RenderView::navigateBackForwardSoon(int offset) {
|
| @@ -2554,13 +2367,6 @@
|
| }
|
|
|
| void RenderView::didCreateDataSource(WebFrame* frame, WebDataSource* ds) {
|
| - // If there are any app-related fetches in progress, they can be cancelled now
|
| - // since we have navigated away from the page that created them.
|
| - if (!frame->parent()) {
|
| - app_icon_fetchers_.clear();
|
| - app_definition_fetcher_.reset(NULL);
|
| - }
|
| -
|
| // The rest of RenderView assumes that a WebDataSource will always have a
|
| // non-null NavigationState.
|
| bool content_initiated = !pending_navigation_state_.get();
|
| @@ -3418,29 +3224,6 @@
|
| return SkBitmap();
|
| }
|
|
|
| -void RenderView::OnGetApplicationInfo(int page_id) {
|
| - WebApplicationInfo app_info;
|
| - if (page_id == page_id_) {
|
| - string16 error;
|
| - web_apps::ParseWebAppFromWebDocument(webview()->mainFrame(), &app_info,
|
| - &error);
|
| - }
|
| -
|
| - // Prune out any data URLs in the set of icons. The browser process expects
|
| - // any icon with a data URL to have originated from a favicon. We don't want
|
| - // to decode arbitrary data URLs in the browser process. See
|
| - // http://b/issue?id=1162972
|
| - for (size_t i = 0; i < app_info.icons.size(); ++i) {
|
| - if (app_info.icons[i].url.SchemeIs(chrome::kDataScheme)) {
|
| - app_info.icons.erase(app_info.icons.begin() + i);
|
| - --i;
|
| - }
|
| - }
|
| -
|
| - Send(new ExtensionHostMsg_DidGetApplicationInfo(
|
| - routing_id_, page_id, app_info));
|
| -}
|
| -
|
| GURL RenderView::GetAlternateErrorPageURL(const GURL& failed_url,
|
| ErrorPageType error_type) {
|
| if (failed_url.SchemeIsSecure()) {
|
| @@ -3826,6 +3609,19 @@
|
| return WebNode();
|
| }
|
|
|
| +bool RenderView::IsEditableNode(const WebNode& node) {
|
| + bool is_editable_node = false;
|
| + if (!node.isNull()) {
|
| + if (node.isContentEditable()) {
|
| + is_editable_node = true;
|
| + } else if (node.isElementNode()) {
|
| + is_editable_node =
|
| + node.toConst<WebElement>().isTextFormControlElement();
|
| + }
|
| + }
|
| + return is_editable_node;
|
| +}
|
| +
|
| void RenderView::EvaluateScript(const string16& frame_xpath,
|
| const string16& script,
|
| int id,
|
| @@ -4795,13 +4591,6 @@
|
| }
|
| #endif
|
|
|
| -void RenderView::AddErrorToRootConsole(const string16& message) {
|
| - if (webview() && webview()->mainFrame()) {
|
| - webview()->mainFrame()->addMessageToConsole(
|
| - WebConsoleMessage(WebConsoleMessage::LevelError, message));
|
| - }
|
| -}
|
| -
|
| #if defined(ENABLE_FLAPPER_HACKS)
|
| void RenderView::OnConnectTcpACK(
|
| int request_id,
|
|
|