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

Side by Side Diff: chrome/renderer/render_view.cc

Issue 6623015: Add a path for a web page to request the enumeration of a directory. This, t... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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>
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 /////////////////////////////////////////////////////////////////////////////// 533 ///////////////////////////////////////////////////////////////////////////////
534 534
535 int32 RenderView::next_page_id_ = 1; 535 int32 RenderView::next_page_id_ = 1;
536 536
537 struct RenderView::PendingFileChooser { 537 struct RenderView::PendingFileChooser {
538 PendingFileChooser(const ViewHostMsg_RunFileChooser_Params& p, 538 PendingFileChooser(const ViewHostMsg_RunFileChooser_Params& p,
539 WebFileChooserCompletion* c) 539 WebFileChooserCompletion* c)
540 : params(p), 540 : params(p),
541 completion(c) { 541 completion(c) {
542 } 542 }
543
543 ViewHostMsg_RunFileChooser_Params params; 544 ViewHostMsg_RunFileChooser_Params params;
544 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback. 545 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback.
545 }; 546 };
546 547
547 RenderView::RenderView(RenderThreadBase* render_thread, 548 RenderView::RenderView(RenderThreadBase* render_thread,
548 gfx::NativeViewId parent_hwnd, 549 gfx::NativeViewId parent_hwnd,
549 int32 opener_id, 550 int32 opener_id,
550 const RendererPreferences& renderer_prefs, 551 const RendererPreferences& renderer_prefs,
551 const WebPreferences& webkit_prefs, 552 const WebPreferences& webkit_prefs,
552 SharedRenderViewCounter* counter, 553 SharedRenderViewCounter* counter,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)), 585 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)),
585 devtools_client_(NULL), 586 devtools_client_(NULL),
586 geolocation_dispatcher_(NULL), 587 geolocation_dispatcher_(NULL),
587 speech_input_dispatcher_(NULL), 588 speech_input_dispatcher_(NULL),
588 device_orientation_dispatcher_(NULL), 589 device_orientation_dispatcher_(NULL),
589 print_helper_(NULL), 590 print_helper_(NULL),
590 searchbox_(NULL), 591 searchbox_(NULL),
591 spellcheck_provider_(NULL), 592 spellcheck_provider_(NULL),
592 accessibility_ack_pending_(false), 593 accessibility_ack_pending_(false),
593 p2p_socket_dispatcher_(NULL), 594 p2p_socket_dispatcher_(NULL),
595 enumeration_completion_id_(0),
594 pending_app_icon_requests_(0), 596 pending_app_icon_requests_(0),
595 session_storage_namespace_id_(session_storage_namespace_id) { 597 session_storage_namespace_id_(session_storage_namespace_id) {
596 #if defined(OS_MACOSX) 598 #if defined(OS_MACOSX)
597 // On Mac, the select popups are rendered by the browser. 599 // On Mac, the select popups are rendered by the browser.
598 // Note that we don't do this in RenderMain otherwise this would not be called 600 // Note that we don't do this in RenderMain otherwise this would not be called
599 // in single-process mode. 601 // in single-process mode.
600 WebKit::WebView::setUseExternalPopupMenus(true); 602 WebKit::WebView::setUseExternalPopupMenus(true);
601 #endif 603 #endif
602 604
603 ClearBlockedContentSettings(); 605 ClearBlockedContentSettings();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 } 685 }
684 686
685 // Observer for Malware DOM details messages. 687 // Observer for Malware DOM details messages.
686 new safe_browsing::MalwareDOMDetails(this); 688 new safe_browsing::MalwareDOMDetails(this);
687 } 689 }
688 690
689 RenderView::~RenderView() { 691 RenderView::~RenderView() {
690 if (decrement_shared_popup_at_destruction_) 692 if (decrement_shared_popup_at_destruction_)
691 shared_popup_counter_->data--; 693 shared_popup_counter_->data--;
692 694
693 // If file chooser is still waiting for answer, dispatch empty answer. 695 // If file chooser or directory enumeration
696 // is still waiting for answer, dispatch empty answer.
694 while (!file_chooser_completions_.empty()) { 697 while (!file_chooser_completions_.empty()) {
695 if (file_chooser_completions_.front()->completion) { 698 if (file_chooser_completions_.front()->completion) {
696 file_chooser_completions_.front()->completion->didChooseFile( 699 file_chooser_completions_.front()->completion->didChooseFile(
697 WebVector<WebString>()); 700 WebVector<WebString>());
698 } 701 }
699 file_chooser_completions_.pop_front(); 702 file_chooser_completions_.pop_front();
700 } 703 }
701 704
705 while (!enumeration_completions_.empty()) {
706 if (enumeration_completions_.begin()->second) {
707 enumeration_completions_.begin()->second->didChooseFile(
708 WebVector<WebString>());
709 }
710 enumeration_completions_.erase(enumeration_completions_.begin());
711 }
712
702 #if defined(OS_MACOSX) 713 #if defined(OS_MACOSX)
703 // Tell the spellchecker that the document is closed. 714 // Tell the spellchecker that the document is closed.
704 if (has_document_tag_) 715 if (has_document_tag_)
705 Send(new ViewHostMsg_DocumentWithTagClosed(routing_id_, document_tag_)); 716 Send(new ViewHostMsg_DocumentWithTagClosed(routing_id_, document_tag_));
706 717
707 // Destroy all fake plugin window handles on the browser side. 718 // Destroy all fake plugin window handles on the browser side.
708 while (!fake_plugin_window_handles_.empty()) { 719 while (!fake_plugin_window_handles_.empty()) {
709 // Make sure no NULL plugin window handles were inserted into this list. 720 // Make sure no NULL plugin window handles were inserted into this list.
710 DCHECK(*fake_plugin_window_handles_.begin()); 721 DCHECK(*fake_plugin_window_handles_.begin());
711 // DestroyFakePluginWindowHandle modifies fake_plugin_window_handles_. 722 // DestroyFakePluginWindowHandle modifies fake_plugin_window_handles_.
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) 1064 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus)
1054 IPC_MESSAGE_HANDLER(ViewMsg_ScrollFocusedEditableNodeIntoView, 1065 IPC_MESSAGE_HANDLER(ViewMsg_ScrollFocusedEditableNodeIntoView,
1055 OnScrollFocusedEditableNodeIntoView) 1066 OnScrollFocusedEditableNodeIntoView)
1056 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) 1067 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck)
1057 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) 1068 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences)
1058 IPC_MESSAGE_HANDLER(ViewMsg_SetAltErrorPageURL, OnSetAltErrorPageURL) 1069 IPC_MESSAGE_HANDLER(ViewMsg_SetAltErrorPageURL, OnSetAltErrorPageURL)
1059 IPC_MESSAGE_HANDLER(ViewMsg_InstallMissingPlugin, OnInstallMissingPlugin) 1070 IPC_MESSAGE_HANDLER(ViewMsg_InstallMissingPlugin, OnInstallMissingPlugin)
1060 IPC_MESSAGE_HANDLER(ViewMsg_DisplayPrerenderedPage, 1071 IPC_MESSAGE_HANDLER(ViewMsg_DisplayPrerenderedPage,
1061 OnDisplayPrerenderedPage) 1072 OnDisplayPrerenderedPage)
1062 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse) 1073 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse)
1074 IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse,
1075 OnEnumerateDirectoryResponse)
1063 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) 1076 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
1064 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, 1077 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage,
1065 OnGetAllSavableResourceLinksForCurrentPage) 1078 OnGetAllSavableResourceLinksForCurrentPage)
1066 IPC_MESSAGE_HANDLER( 1079 IPC_MESSAGE_HANDLER(
1067 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, 1080 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks,
1068 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) 1081 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks)
1069 IPC_MESSAGE_HANDLER(ViewMsg_GetApplicationInfo, OnGetApplicationInfo) 1082 IPC_MESSAGE_HANDLER(ViewMsg_GetApplicationInfo, OnGetApplicationInfo)
1070 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose) 1083 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose)
1071 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) 1084 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage)
1072 IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged) 1085 IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged)
(...skipping 1288 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 2374
2362 bool RenderView::isShowingSpellingUI() { 2375 bool RenderView::isShowingSpellingUI() {
2363 return spelling_panel_visible_; 2376 return spelling_panel_visible_;
2364 } 2377 }
2365 2378
2366 void RenderView::updateSpellingUIWithMisspelledWord(const WebString& word) { 2379 void RenderView::updateSpellingUIWithMisspelledWord(const WebString& word) {
2367 Send(new ViewHostMsg_UpdateSpellingPanelWithMisspelledWord(routing_id_, 2380 Send(new ViewHostMsg_UpdateSpellingPanelWithMisspelledWord(routing_id_,
2368 word)); 2381 word));
2369 } 2382 }
2370 2383
2384 bool RenderView::enumerateDirectory(
2385 const WebString& path,
2386 WebFileChooserCompletion* chooser_completion) {
2387 int id = enumeration_completion_id_++;
2388 enumeration_completions_[id] = chooser_completion;
2389 return Send(new ViewHostMsg_EnumerateDirectory(
2390 routing_id_,
2391 id,
2392 webkit_glue::WebStringToFilePath(path)));
2393 }
2394
2371 void RenderView::continuousSpellCheckingEnabledStateChanged() { 2395 void RenderView::continuousSpellCheckingEnabledStateChanged() {
2372 UpdateToggleSpellCheckCommandState(); 2396 UpdateToggleSpellCheckCommandState();
2373 } 2397 }
2374 2398
2375 bool RenderView::runFileChooser( 2399 bool RenderView::runFileChooser(
2376 const WebKit::WebFileChooserParams& params, 2400 const WebKit::WebFileChooserParams& params,
2377 WebFileChooserCompletion* chooser_completion) { 2401 WebFileChooserCompletion* chooser_completion) {
2378 // Do not open the file dialog in a hidden RenderView. 2402 // Do not open the file dialog in a hidden RenderView.
2379 if (is_hidden()) 2403 if (is_hidden())
2380 return false; 2404 return false;
(...skipping 2349 matching lines...) Expand 10 before | Expand all | Expand 10 after
4730 if (provisional_ds) { 4754 if (provisional_ds) {
4731 NavigationState* provisional_navigation_state = 4755 NavigationState* provisional_navigation_state =
4732 NavigationState::FromDataSource(provisional_ds); 4756 NavigationState::FromDataSource(provisional_ds);
4733 if (provisional_navigation_state) { 4757 if (provisional_navigation_state) {
4734 provisional_navigation_state->set_prerendered_page_display_time( 4758 provisional_navigation_state->set_prerendered_page_display_time(
4735 Time::Now()); 4759 Time::Now());
4736 } 4760 }
4737 } 4761 }
4738 } 4762 }
4739 4763
4764 void RenderView::OnEnumerateDirectoryResponse(
4765 int id,
4766 const std::vector<FilePath>& paths) {
4767 if (!enumeration_completions_[id])
4768 return;
4769
4770 WebVector<WebString> ws_file_names(paths.size());
4771 for (size_t i = 0; i < paths.size(); ++i)
4772 ws_file_names[i] = webkit_glue::FilePathToWebString(paths[i]);
4773
4774 enumeration_completions_[id]->didChooseFile(ws_file_names);
4775 enumeration_completions_.erase(id);
4776 }
4777
4740 void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) { 4778 void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) {
4741 // This could happen if we navigated to a different page before the user 4779 // This could happen if we navigated to a different page before the user
4742 // closed the chooser. 4780 // closed the chooser.
4743 if (file_chooser_completions_.empty()) 4781 if (file_chooser_completions_.empty())
4744 return; 4782 return;
4745 4783
4746 WebVector<WebString> ws_file_names(paths.size()); 4784 WebVector<WebString> ws_file_names(paths.size());
4747 for (size_t i = 0; i < paths.size(); ++i) 4785 for (size_t i = 0; i < paths.size(); ++i)
4748 ws_file_names[i] = webkit_glue::FilePathToWebString(paths[i]); 4786 ws_file_names[i] = webkit_glue::FilePathToWebString(paths[i]);
4749 4787
(...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after
5704 } 5742 }
5705 } 5743 }
5706 5744
5707 void RenderView::OnContextMenuClosed( 5745 void RenderView::OnContextMenuClosed(
5708 const webkit_glue::CustomContextMenuContext& custom_context) { 5746 const webkit_glue::CustomContextMenuContext& custom_context) {
5709 if (custom_context.is_pepper_menu) 5747 if (custom_context.is_pepper_menu)
5710 pepper_delegate_.OnContextMenuClosed(custom_context); 5748 pepper_delegate_.OnContextMenuClosed(custom_context);
5711 else 5749 else
5712 context_menu_node_.reset(); 5750 context_menu_node_.reset();
5713 } 5751 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698