diff options
author | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-14 05:46:24 +0000 |
---|---|---|
committer | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-14 05:46:24 +0000 |
commit | 1d89a82f68b6981928c0d32cf8ec37e3b07b5b9e (patch) | |
tree | 944c1af45521b01498fae7f92a3657277e152ca6 | |
parent | 8dfc98d0c2e7291a1a0d215bb34bd891680e46f5 (diff) | |
download | chromium_src-1d89a82f68b6981928c0d32cf8ec37e3b07b5b9e.zip chromium_src-1d89a82f68b6981928c0d32cf8ec37e3b07b5b9e.tar.gz chromium_src-1d89a82f68b6981928c0d32cf8ec37e3b07b5b9e.tar.bz2 |
Refactor the inner classes from SSLManager to their own files to reduce the complexity of SSLManager. Heading towards unit testability of this code.
TBR=jcampan
TEST=No functionality change.
Review URL: http://codereview.chromium.org/113391
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16041 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/browser.vcproj | 5380 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_blocking_page.cc | 15 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_blocking_page.h | 13 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_cert_error_handler.h | 58 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_error_handler.cc | 209 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_error_handler.h | 176 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_manager.cc | 278 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_manager.h | 281 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_mixed_content_handler.h | 38 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_policy.cc | 101 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_policy.h | 16 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_request_info.h | 65 | ||||
-rw-r--r-- | chrome/chrome.gyp | 5 |
13 files changed, 3362 insertions, 3273 deletions
diff --git a/chrome/browser/browser.vcproj b/chrome/browser/browser.vcproj index 874f30e..646bd17 100644 --- a/chrome/browser/browser.vcproj +++ b/chrome/browser/browser.vcproj @@ -1,2680 +1,2700 @@ -<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="browser"
- ProjectGUID="{5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}"
- RootNamespace="Browser"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- <ToolFile
- RelativePath="..\tools\build\win\resource_text_file_copy.rules"
- />
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="4"
- InheritedPropertySheets=".\browser.vsprops;$(SolutionDir)..\build\debug.vsprops;..\tools\build\win\precompiled_wtl.vsprops"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="Resource text file copy"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="4"
- InheritedPropertySheets=".\browser.vsprops;$(SolutionDir)..\build\release.vsprops;$(SolutionDir)\tools\build\win\js_engine.vsprops"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="Resource text file copy"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Autocomplete"
- >
- <File
- RelativePath=".\autocomplete\autocomplete.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_accessibility.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_accessibility.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_edit.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_edit.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_edit_view.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_edit_view_win.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_edit_view_win.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_popup_model.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_popup_model.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_popup_view.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_popup_view_win.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\autocomplete_popup_view_win.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\history_contents_provider.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\history_contents_provider.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\history_url_provider.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\history_url_provider.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\keyword_provider.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\keyword_provider.h"
- >
- </File>
- <File
- RelativePath=".\autocomplete\search_provider.cc"
- >
- </File>
- <File
- RelativePath=".\autocomplete\search_provider.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Base"
- >
- <File
- RelativePath=".\alternate_nav_url_fetcher.cc"
- >
- </File>
- <File
- RelativePath=".\alternate_nav_url_fetcher.h"
- >
- </File>
- <File
- RelativePath=".\browser_about_handler.cc"
- >
- </File>
- <File
- RelativePath=".\browser_about_handler.h"
- >
- </File>
- <File
- RelativePath=".\browser_init.cc"
- >
- </File>
- <File
- RelativePath=".\browser_init.h"
- >
- </File>
- <File
- RelativePath=".\browser_main.cc"
- >
- </File>
- <File
- RelativePath=".\browser_main_win.cc"
- >
- </File>
- <File
- RelativePath=".\browser_prefs.cc"
- >
- </File>
- <File
- RelativePath=".\browser_prefs.h"
- >
- </File>
- <File
- RelativePath=".\browser_process.cc"
- >
- </File>
- <File
- RelativePath=".\browser_process.h"
- >
- </File>
- <File
- RelativePath=".\browser_process_impl.cc"
- >
- </File>
- <File
- RelativePath=".\browser_process_impl.h"
- >
- </File>
- <File
- RelativePath=".\browser_shutdown.cc"
- >
- </File>
- <File
- RelativePath=".\browser_shutdown.h"
- >
- </File>
- <File
- RelativePath=".\browser_theme_provider.cc"
- >
- </File>
- <File
- RelativePath=".\browser_theme_provider.h"
- >
- </File>
- <File
- RelativePath=".\browser_url_handler.cc"
- >
- </File>
- <File
- RelativePath=".\browser_url_handler.h"
- >
- </File>
- <File
- RelativePath=".\browsing_data_remover.cc"
- >
- </File>
- <File
- RelativePath=".\browsing_data_remover.h"
- >
- </File>
- <File
- RelativePath=".\browsing_instance.cc"
- >
- </File>
- <File
- RelativePath=".\browsing_instance.h"
- >
- </File>
- <File
- RelativePath=".\cancelable_request.cc"
- >
- </File>
- <File
- RelativePath=".\cancelable_request.h"
- >
- </File>
- <File
- RelativePath=".\character_encoding.cc"
- >
- </File>
- <File
- RelativePath=".\character_encoding.h"
- >
- </File>
- <File
- RelativePath=".\chrome_thread.cc"
- >
- </File>
- <File
- RelativePath=".\chrome_thread.h"
- >
- </File>
- <File
- RelativePath=".\cross_site_request_manager.cc"
- >
- </File>
- <File
- RelativePath=".\cross_site_request_manager.h"
- >
- </File>
- <File
- RelativePath=".\fav_icon_helper.cc"
- >
- </File>
- <File
- RelativePath=".\fav_icon_helper.h"
- >
- </File>
- <File
- RelativePath=".\first_run.cc"
- >
- </File>
- <File
- RelativePath=".\first_run.h"
- >
- </File>
- <File
- RelativePath=".\google_url_tracker.cc"
- >
- </File>
- <File
- RelativePath=".\google_url_tracker.h"
- >
- </File>
- <File
- RelativePath=".\google_util.cc"
- >
- </File>
- <File
- RelativePath=".\google_util.h"
- >
- </File>
- <File
- RelativePath=".\icon_loader.cc"
- >
- </File>
- <File
- RelativePath=".\icon_loader.h"
- >
- </File>
- <File
- RelativePath=".\icon_loader_win.cc"
- >
- </File>
- <File
- RelativePath=".\icon_manager.cc"
- >
- </File>
- <File
- RelativePath=".\icon_manager.h"
- >
- </File>
- <File
- RelativePath=".\icon_manager_win.cc"
- >
- </File>
- <File
- RelativePath=".\ime_input.cc"
- >
- </File>
- <File
- RelativePath=".\ime_input.h"
- >
- </File>
- <File
- RelativePath=".\input_window_dialog.h"
- >
- </File>
- <File
- RelativePath=".\input_window_dialog_win.cc"
- >
- </File>
- <File
- RelativePath=".\jankometer.cc"
- >
- </File>
- <File
- RelativePath=".\jankometer.h"
- >
- </File>
- <File
- RelativePath=".\memory_details.cc"
- >
- </File>
- <File
- RelativePath=".\memory_details.h"
- >
- </File>
- <File
- RelativePath=".\meta_table_helper.cc"
- >
- </File>
- <File
- RelativePath=".\meta_table_helper.h"
- >
- </File>
- <File
- RelativePath=".\plugin_process_host.cc"
- >
- </File>
- <File
- RelativePath=".\plugin_process_host.h"
- >
- </File>
- <File
- RelativePath=".\plugin_service.cc"
- >
- </File>
- <File
- RelativePath=".\plugin_service.h"
- >
- </File>
- <File
- RelativePath="..\tools\build\win\precompiled_wtl.cc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\tools\build\win\precompiled_wtl.h"
- >
- </File>
- <File
- RelativePath=".\process_singleton.h"
- >
- </File>
- <File
- RelativePath=".\process_singleton_win.cc"
- >
- </File>
- <File
- RelativePath=".\profile.cc"
- >
- </File>
- <File
- RelativePath=".\profile.h"
- >
- </File>
- <File
- RelativePath=".\profile_manager.cc"
- >
- </File>
- <File
- RelativePath=".\profile_manager.h"
- >
- </File>
- <File
- RelativePath=".\session_startup_pref.cc"
- >
- </File>
- <File
- RelativePath=".\session_startup_pref.h"
- >
- </File>
- <File
- RelativePath=".\shell_dialogs.h"
- >
- </File>
- <File
- RelativePath=".\shell_integration.cc"
- >
- </File>
- <File
- RelativePath=".\shell_integration.h"
- >
- </File>
- <File
- RelativePath=".\spellcheck_worditerator.cc"
- >
- </File>
- <File
- RelativePath=".\spellcheck_worditerator.h"
- >
- </File>
- <File
- RelativePath=".\spellchecker.cc"
- >
- </File>
- <File
- RelativePath=".\spellchecker.h"
- >
- </File>
- <File
- RelativePath=".\user_data_manager.cc"
- >
- </File>
- <File
- RelativePath=".\user_data_manager.h"
- >
- </File>
- <File
- RelativePath=".\visitedlink_master.cc"
- >
- </File>
- <File
- RelativePath=".\visitedlink_master.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Bookmarks"
- >
- <File
- RelativePath=".\bookmarks\bookmark_codec.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_codec.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_context_menu.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_context_menu.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_context_menu_win.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_drag_data.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_drag_data.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_drop_info.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_drop_info.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_editor.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_folder_tree_model.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_folder_tree_model.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_html_writer.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_html_writer.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_menu_controller_win.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_menu_controller_win.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_model.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_model.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_service.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_storage.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_storage.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_table_model.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_table_model.h"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_utils.cc"
- >
- </File>
- <File
- RelativePath=".\bookmarks\bookmark_utils.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Browser Window"
- >
- <File
- RelativePath=".\app_modal_dialog.cc"
- >
- </File>
- <File
- RelativePath=".\app_modal_dialog.h"
- >
- </File>
- <File
- RelativePath=".\app_modal_dialog_queue.cc"
- >
- </File>
- <File
- RelativePath=".\app_modal_dialog_queue.h"
- >
- </File>
- <File
- RelativePath=".\app_modal_dialog_win.cc"
- >
- </File>
- <File
- RelativePath=".\back_forward_menu_model.cc"
- >
- </File>
- <File
- RelativePath=".\back_forward_menu_model.h"
- >
- </File>
- <File
- RelativePath=".\back_forward_menu_model_win.cc"
- >
- </File>
- <File
- RelativePath=".\back_forward_menu_model_win.h"
- >
- </File>
- <File
- RelativePath=".\browser.cc"
- >
- </File>
- <File
- RelativePath=".\browser.h"
- >
- </File>
- <File
- RelativePath=".\browser_list.cc"
- >
- </File>
- <File
- RelativePath=".\browser_list.h"
- >
- </File>
- <File
- RelativePath=".\browser_window.h"
- >
- </File>
- <File
- RelativePath=".\command_updater.cc"
- >
- </File>
- <File
- RelativePath=".\command_updater.h"
- >
- </File>
- <File
- RelativePath=".\dock_info.cc"
- >
- </File>
- <File
- RelativePath=".\dock_info.h"
- >
- </File>
- <File
- RelativePath=".\find_bar.h"
- >
- </File>
- <File
- RelativePath=".\find_bar_controller.cc"
- >
- </File>
- <File
- RelativePath=".\find_bar_controller.h"
- >
- </File>
- <File
- RelativePath=".\find_notification_details.h"
- >
- </File>
- <File
- RelativePath=".\jsmessage_box_handler.cc"
- >
- </File>
- <File
- RelativePath=".\jsmessage_box_handler.h"
- >
- </File>
- <File
- RelativePath=".\load_from_memory_cache_details.h"
- >
- </File>
- <File
- RelativePath=".\load_notification_details.h"
- >
- </File>
- <File
- RelativePath=".\location_bar.h"
- >
- </File>
- <File
- RelativePath=".\login_prompt.cc"
- >
- </File>
- <File
- RelativePath=".\login_prompt.h"
- >
- </File>
- <File
- RelativePath=".\options_window.h"
- >
- </File>
- <File
- RelativePath=".\status_bubble.h"
- >
- </File>
- <File
- RelativePath=".\task_manager.cc"
- >
- </File>
- <File
- RelativePath=".\task_manager.h"
- >
- </File>
- <File
- RelativePath=".\task_manager_resource_providers.cc"
- >
- </File>
- <File
- RelativePath=".\task_manager_resource_providers.h"
- >
- </File>
- <File
- RelativePath=".\window_sizer.cc"
- >
- </File>
- <File
- RelativePath=".\window_sizer.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Automation"
- >
- <File
- RelativePath=".\automation\automation_autocomplete_edit_tracker.h"
- >
- </File>
- <File
- RelativePath=".\automation\automation_browser_tracker.h"
- >
- </File>
- <File
- RelativePath=".\automation\automation_constrained_window_tracker.h"
- >
- </File>
- <File
- RelativePath=".\automation\automation_provider.cc"
- >
- </File>
- <File
- RelativePath=".\automation\automation_provider.h"
- >
- </File>
- <File
- RelativePath=".\automation\automation_provider_list.cc"
- >
- </File>
- <File
- RelativePath=".\automation\automation_provider_list.h"
- >
- </File>
- <File
- RelativePath=".\automation\automation_provider_list_generic.cc"
- >
- </File>
- <File
- RelativePath=".\automation\automation_resource_tracker.cc"
- >
- </File>
- <File
- RelativePath=".\automation\automation_resource_tracker.h"
- >
- </File>
- <File
- RelativePath=".\automation\automation_tab_tracker.h"
- >
- </File>
- <File
- RelativePath=".\automation\automation_window_tracker.h"
- >
- </File>
- <File
- RelativePath=".\automation\ui_controls.cc"
- >
- </File>
- <File
- RelativePath=".\automation\ui_controls.h"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_failed_dns_job.cc"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_failed_dns_job.h"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_mock_http_job.cc"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_mock_http_job.h"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_mock_net_error_job.cc"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_mock_net_error_job.h"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_slow_download_job.cc"
- >
- </File>
- <File
- RelativePath=".\automation\url_request_slow_download_job.h"
- >
- </File>
- <File
- RelativePath=".\view_ids.h"
- >
- </File>
- </Filter>
- <Filter
- Name="History"
- >
- <File
- RelativePath=".\history\archived_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\archived_database.h"
- >
- </File>
- <File
- RelativePath=".\history\download_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\download_database.h"
- >
- </File>
- <File
- RelativePath=".\history\download_types.h"
- >
- </File>
- <File
- RelativePath=".\history\expire_history_backend.cc"
- >
- </File>
- <File
- RelativePath=".\history\expire_history_backend.h"
- >
- </File>
- <File
- RelativePath=".\history\history.cc"
- >
- </File>
- <File
- RelativePath=".\history\history.h"
- >
- </File>
- <File
- RelativePath=".\history\history_backend.cc"
- >
- </File>
- <File
- RelativePath=".\history\history_backend.h"
- >
- </File>
- <File
- RelativePath=".\history\history_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\history_database.h"
- >
- </File>
- <File
- RelativePath=".\history\history_indexer.idl"
- >
- </File>
- <File
- RelativePath=".\history\history_marshaling.h"
- >
- </File>
- <File
- RelativePath=".\history\history_notifications.h"
- >
- </File>
- <File
- RelativePath=".\history\history_publisher.cc"
- >
- </File>
- <File
- RelativePath=".\history\history_publisher.h"
- >
- </File>
- <File
- RelativePath=".\history\history_publisher_win.cc"
- >
- </File>
- <File
- RelativePath=".\history\history_types.cc"
- >
- </File>
- <File
- RelativePath=".\history\history_types.h"
- >
- </File>
- <File
- RelativePath=".\history\in_memory_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\in_memory_database.h"
- >
- </File>
- <File
- RelativePath=".\history\in_memory_history_backend.cc"
- >
- </File>
- <File
- RelativePath=".\history\in_memory_history_backend.h"
- >
- </File>
- <File
- RelativePath=".\history\page_usage_data.cc"
- >
- </File>
- <File
- RelativePath=".\history\page_usage_data.h"
- >
- </File>
- <File
- RelativePath=".\history\query_parser.cc"
- >
- </File>
- <File
- RelativePath=".\history\query_parser.h"
- >
- </File>
- <File
- RelativePath=".\history\snippet.cc"
- >
- </File>
- <File
- RelativePath=".\history\snippet.h"
- >
- </File>
- <File
- RelativePath=".\history\starred_url_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\starred_url_database.h"
- >
- </File>
- <File
- RelativePath=".\history\text_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\text_database.h"
- >
- </File>
- <File
- RelativePath=".\history\text_database_manager.cc"
- >
- </File>
- <File
- RelativePath=".\history\text_database_manager.h"
- >
- </File>
- <File
- RelativePath=".\history\thumbnail_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\thumbnail_database.h"
- >
- </File>
- <File
- RelativePath=".\history\url_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\url_database.h"
- >
- </File>
- <File
- RelativePath=".\history\visit_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\visit_database.h"
- >
- </File>
- <File
- RelativePath=".\history\visit_tracker.cc"
- >
- </File>
- <File
- RelativePath=".\history\visit_tracker.h"
- >
- </File>
- <File
- RelativePath=".\history\visitsegment_database.cc"
- >
- </File>
- <File
- RelativePath=".\history\visitsegment_database.h"
- >
- </File>
- <Filter
- Name="HangMonitor"
- >
- <File
- RelativePath=".\hang_monitor\hung_plugin_action.cc"
- >
- </File>
- <File
- RelativePath=".\hang_monitor\hung_plugin_action.h"
- >
- </File>
- <File
- RelativePath=".\hang_monitor\hung_window_detector.cc"
- >
- </File>
- <File
- RelativePath=".\hang_monitor\hung_window_detector.h"
- >
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Sessions and Tab Restore"
- >
- <File
- RelativePath=".\sessions\base_session_service.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\base_session_service.h"
- >
- </File>
- <File
- RelativePath=".\sessions\session_backend.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\session_backend.h"
- >
- </File>
- <File
- RelativePath=".\sessions\session_command.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\session_command.h"
- >
- </File>
- <File
- RelativePath=".\sessions\session_id.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\session_id.h"
- >
- </File>
- <File
- RelativePath=".\sessions\session_restore.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\session_restore.h"
- >
- </File>
- <File
- RelativePath=".\sessions\session_service.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\session_service.h"
- >
- </File>
- <File
- RelativePath=".\sessions\session_types.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\session_types.h"
- >
- </File>
- <File
- RelativePath=".\sessions\tab_restore_service.cc"
- >
- </File>
- <File
- RelativePath=".\sessions\tab_restore_service.h"
- >
- </File>
- </Filter>
- <Filter
- Name="WebData"
- >
- <File
- RelativePath=".\webdata\web_data_service.cc"
- >
- </File>
- <File
- RelativePath=".\webdata\web_data_service.h"
- >
- </File>
- <File
- RelativePath=".\webdata\web_data_service_win.cc"
- >
- </File>
- <File
- RelativePath=".\webdata\web_database.cc"
- >
- </File>
- <File
- RelativePath=".\webdata\web_database.h"
- >
- </File>
- <File
- RelativePath=".\webdata\web_database_win.cc"
- >
- </File>
- </Filter>
- <Filter
- Name="Importer"
- >
- <File
- RelativePath=".\importer\firefox2_importer.cc"
- >
- </File>
- <File
- RelativePath=".\importer\firefox2_importer.h"
- >
- </File>
- <File
- RelativePath=".\importer\firefox3_importer.cc"
- >
- </File>
- <File
- RelativePath=".\importer\firefox3_importer.h"
- >
- </File>
- <File
- RelativePath=".\importer\firefox_importer_utils.cc"
- >
- </File>
- <File
- RelativePath=".\importer\firefox_importer_utils.h"
- >
- </File>
- <File
- RelativePath=".\importer\firefox_profile_lock.cc"
- >
- </File>
- <File
- RelativePath=".\importer\firefox_profile_lock.h"
- >
- </File>
- <File
- RelativePath=".\importer\firefox_profile_lock_win.cc"
- >
- </File>
- <File
- RelativePath=".\importer\ie_importer.cc"
- >
- </File>
- <File
- RelativePath=".\importer\ie_importer.h"
- >
- </File>
- <File
- RelativePath=".\importer\importer.cc"
- >
- </File>
- <File
- RelativePath=".\importer\importer.h"
- >
- </File>
- <File
- RelativePath=".\importer\mork_reader.cc"
- >
- </File>
- <File
- RelativePath=".\importer\mork_reader.h"
- >
- </File>
- <File
- RelativePath=".\importer\toolbar_importer.cc"
- >
- </File>
- <File
- RelativePath=".\importer\toolbar_importer.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Tabs"
- >
- <File
- RelativePath=".\tabs\tab_strip_model.cc"
- >
- </File>
- <File
- RelativePath=".\tabs\tab_strip_model.h"
- >
- </File>
- <File
- RelativePath=".\tabs\tab_strip_model_order_controller.cc"
- >
- </File>
- <File
- RelativePath=".\tabs\tab_strip_model_order_controller.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Printing"
- >
- <File
- RelativePath=".\printing\page_number.cc"
- >
- </File>
- <File
- RelativePath=".\printing\page_number.h"
- >
- </File>
- <File
- RelativePath=".\printing\page_overlays.cc"
- >
- </File>
- <File
- RelativePath=".\printing\page_overlays.h"
- >
- </File>
- <File
- RelativePath=".\printing\page_range.cc"
- >
- </File>
- <File
- RelativePath=".\printing\page_range.h"
- >
- </File>
- <File
- RelativePath=".\printing\page_setup.cc"
- >
- </File>
- <File
- RelativePath=".\printing\page_setup.h"
- >
- </File>
- <File
- RelativePath=".\printing\print_job.cc"
- >
- </File>
- <File
- RelativePath=".\printing\print_job.h"
- >
- </File>
- <File
- RelativePath=".\printing\print_job_manager.cc"
- >
- </File>
- <File
- RelativePath=".\printing\print_job_manager.h"
- >
- </File>
- <File
- RelativePath=".\printing\print_job_worker.cc"
- >
- </File>
- <File
- RelativePath=".\printing\print_job_worker.h"
- >
- </File>
- <File
- RelativePath=".\printing\print_job_worker_owner.h"
- >
- </File>
- <File
- RelativePath=".\printing\print_settings.cc"
- >
- </File>
- <File
- RelativePath=".\printing\print_settings.h"
- >
- </File>
- <File
- RelativePath=".\printing\print_view_manager.cc"
- >
- </File>
- <File
- RelativePath=".\printing\print_view_manager.h"
- >
- </File>
- <File
- RelativePath=".\printing\printed_document.cc"
- >
- </File>
- <File
- RelativePath=".\printing\printed_document.h"
- >
- </File>
- <File
- RelativePath=".\printing\printed_page.cc"
- >
- </File>
- <File
- RelativePath=".\printing\printed_page.h"
- >
- </File>
- <File
- RelativePath=".\printing\printed_pages_source.h"
- >
- </File>
- <File
- RelativePath=".\printing\printer_query.cc"
- >
- </File>
- <File
- RelativePath=".\printing\printer_query.h"
- >
- </File>
- <File
- RelativePath=".\printing\win_printing_context.cc"
- >
- </File>
- <File
- RelativePath=".\printing\win_printing_context.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Sandbox"
- >
- <File
- RelativePath=".\sandbox_policy.cc"
- >
- </File>
- <File
- RelativePath=".\sandbox_policy.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Password Manager"
- >
- <File
- RelativePath=".\password_manager\encryptor.h"
- >
- </File>
- <File
- RelativePath=".\password_manager\encryptor_win.cc"
- >
- </File>
- <File
- RelativePath=".\password_manager\ie7_password.cc"
- >
- </File>
- <File
- RelativePath=".\password_manager\ie7_password.h"
- >
- </File>
- <File
- RelativePath=".\password_manager\password_form_manager.cc"
- >
- </File>
- <File
- RelativePath=".\password_manager\password_form_manager.h"
- >
- </File>
- <File
- RelativePath=".\password_manager\password_form_manager_win.cc"
- >
- </File>
- <File
- RelativePath=".\password_manager\password_manager.cc"
- >
- </File>
- <File
- RelativePath=".\password_manager\password_manager.h"
- >
- </File>
- </Filter>
- <Filter
- Name="External Tab"
- >
- <File
- RelativePath=".\external_tab_container.cc"
- >
- </File>
- <File
- RelativePath=".\external_tab_container.h"
- >
- </File>
- </Filter>
- <Filter
- Name="DOM UI"
- >
- <File
- RelativePath=".\dom_ui\chrome_url_data_manager.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\chrome_url_data_manager.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\debugger_ui.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\debugger_ui.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\devtools_ui.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\devtools_ui.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_factory.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_factory.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_favicon_source.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_favicon_source.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_theme_source.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_theme_source.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_thumbnail_source.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\dom_ui_thumbnail_source.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\downloads_ui.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\downloads_ui.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\fileicon_source.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\fileicon_source.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\history_ui.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\history_ui.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\html_dialog_ui.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\html_dialog_ui.h"
- >
- </File>
- <File
- RelativePath=".\dom_ui\new_tab_ui.cc"
- >
- </File>
- <File
- RelativePath=".\dom_ui\new_tab_ui.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Net"
- >
- <File
- RelativePath=".\net\chrome_url_request_context.cc"
- >
- </File>
- <File
- RelativePath=".\net\chrome_url_request_context.h"
- >
- </File>
- <File
- RelativePath=".\net\dns_global.cc"
- >
- </File>
- <File
- RelativePath=".\net\dns_global.h"
- >
- </File>
- <File
- RelativePath=".\net\dns_host_info.cc"
- >
- </File>
- <File
- RelativePath=".\net\dns_host_info.h"
- >
- </File>
- <File
- RelativePath=".\net\dns_master.cc"
- >
- </File>
- <File
- RelativePath=".\net\dns_master.h"
- >
- </File>
- <File
- RelativePath=".\net\referrer.cc"
- >
- </File>
- <File
- RelativePath=".\net\referrer.h"
- >
- </File>
- <File
- RelativePath=".\net\resolve_proxy_msg_helper.cc"
- >
- </File>
- <File
- RelativePath=".\net\resolve_proxy_msg_helper.h"
- >
- </File>
- <File
- RelativePath=".\net\sdch_dictionary_fetcher.cc"
- >
- </File>
- <File
- RelativePath=".\net\sdch_dictionary_fetcher.h"
- >
- </File>
- <File
- RelativePath=".\net\url_fetcher.cc"
- >
- </File>
- <File
- RelativePath=".\net\url_fetcher.h"
- >
- </File>
- <File
- RelativePath=".\net\url_fetcher_protect.cc"
- >
- </File>
- <File
- RelativePath=".\net\url_fetcher_protect.h"
- >
- </File>
- <File
- RelativePath=".\net\url_fixer_upper.cc"
- >
- </File>
- <File
- RelativePath=".\net\url_fixer_upper.h"
- >
- </File>
- </Filter>
- <Filter
- Name="RLZ"
- >
- <File
- RelativePath=".\rlz\rlz.cc"
- >
- </File>
- <File
- RelativePath=".\rlz\rlz.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Safe Browsing"
- >
- <File
- RelativePath=".\safe_browsing\bloom_filter.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\bloom_filter.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\chunk_range.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\chunk_range.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\protocol_manager.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\protocol_manager.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\protocol_parser.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\protocol_parser.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_blocking_page.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_blocking_page.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_database.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_database.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_database_bloom.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_database_bloom.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_service.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_service.h"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_util.cc"
- >
- </File>
- <File
- RelativePath=".\safe_browsing\safe_browsing_util.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Accessibility"
- >
- <File
- RelativePath=".\browser_accessibility.cc"
- >
- </File>
- <File
- RelativePath=".\browser_accessibility.h"
- >
- </File>
- <File
- RelativePath=".\browser_accessibility_manager.cc"
- >
- </File>
- <File
- RelativePath=".\browser_accessibility_manager.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Download"
- >
- <File
- RelativePath=".\download\download_exe.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_file.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_file.h"
- >
- </File>
- <File
- RelativePath=".\download\download_item_model.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_item_model.h"
- >
- </File>
- <File
- RelativePath=".\download\download_manager.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_manager.h"
- >
- </File>
- <File
- RelativePath=".\download\download_request_dialog_delegate.h"
- >
- </File>
- <File
- RelativePath=".\download\download_request_dialog_delegate_win.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_request_dialog_delegate_win.h"
- >
- </File>
- <File
- RelativePath=".\download\download_request_manager.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_request_manager.h"
- >
- </File>
- <File
- RelativePath=".\download\download_shelf.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_shelf.h"
- >
- </File>
- <File
- RelativePath=".\download\download_util.cc"
- >
- </File>
- <File
- RelativePath=".\download\download_util.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Save Page"
- >
- <File
- RelativePath=".\download\save_file.cc"
- >
- </File>
- <File
- RelativePath=".\download\save_file.h"
- >
- </File>
- <File
- RelativePath=".\download\save_file_manager.cc"
- >
- </File>
- <File
- RelativePath=".\download\save_file_manager.h"
- >
- </File>
- <File
- RelativePath=".\download\save_item.cc"
- >
- </File>
- <File
- RelativePath=".\download\save_item.h"
- >
- </File>
- <File
- RelativePath=".\download\save_package.cc"
- >
- </File>
- <File
- RelativePath=".\download\save_package.h"
- >
- </File>
- <File
- RelativePath=".\download\save_types.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Autofill"
- >
- <File
- RelativePath=".\autofill_manager.cc"
- >
- </File>
- <File
- RelativePath=".\autofill_manager.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Extensions"
- >
- <File
- RelativePath=".\extensions\extension.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_bookmarks_module.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_bookmarks_module.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_browser_event_router.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_browser_event_router.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_error_reporter.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_error_reporter.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_error_utils.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_error_utils.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_function.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_function.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_function_dispatcher.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_function_dispatcher.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_host.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_host.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_message_service.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_message_service.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_page_actions_module.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_page_actions_module.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_process_manager.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_process_manager.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_protocols.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_protocols.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_shelf.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_shelf.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_tabs_module.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_tabs_module.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_view.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extension_view.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extensions_service.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extensions_service.h"
- >
- </File>
- <File
- RelativePath=".\extensions\extensions_ui.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\extensions_ui.h"
- >
- </File>
- <File
- RelativePath=".\extensions\user_script_master.cc"
- >
- </File>
- <File
- RelativePath=".\extensions\user_script_master.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Renderer Host"
- >
- <File
- RelativePath=".\renderer_host\async_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\async_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\audio_renderer_host.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\audio_renderer_host.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\backing_store.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\backing_store.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\backing_store_win.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\browser_render_process_host.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\browser_render_process_host.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\buffered_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\buffered_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\cross_site_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\cross_site_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\download_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\download_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\download_throttling_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\download_throttling_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\media_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\media_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_process_host.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_process_host.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_view_host.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_view_host.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_view_host_delegate.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_view_host_factory.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_view_host_factory.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_widget_helper.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_widget_helper.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_widget_host.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_widget_host.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_widget_host_view.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_widget_host_view_win.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\render_widget_host_view_win.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\renderer_security_policy.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\renderer_security_policy.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\resource_dispatcher_host.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\resource_dispatcher_host.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\resource_message_filter.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\resource_message_filter.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\resource_message_filter_win.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\resource_request_details.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\safe_browsing_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\safe_browsing_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\save_file_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\save_file_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\sync_resource_handler.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\sync_resource_handler.h"
- >
- </File>
- <File
- RelativePath=".\renderer_host\web_cache_manager.cc"
- >
- </File>
- <File
- RelativePath=".\renderer_host\web_cache_manager.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Tab Contents"
- >
- <File
- RelativePath=".\tab_contents\constrained_window.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\infobar_delegate.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\infobar_delegate.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\interstitial_page.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\interstitial_page.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\navigation_controller.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\navigation_controller.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\navigation_entry.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\navigation_entry.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\page_navigator.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\provisional_load_details.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\provisional_load_details.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_context_menu.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_context_menu.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_context_menu_win.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_context_menu_win.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_host_delegate_helper.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_host_delegate_helper.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_host_manager.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\render_view_host_manager.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\repost_form_warning.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\security_style.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\site_instance.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\site_instance.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_contents.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_contents.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_contents_delegate.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_contents_view.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_contents_view.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_contents_view_win.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_contents_view_win.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_util.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\tab_util.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\web_drag_source.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\web_drag_source.h"
- >
- </File>
- <File
- RelativePath=".\tab_contents\web_drop_target.cc"
- >
- </File>
- <File
- RelativePath=".\tab_contents\web_drop_target.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Search Engines"
- >
- <File
- RelativePath=".\search_engines\template_url.cc"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url.h"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_fetcher.cc"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_fetcher.h"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_model.cc"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_model.h"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_parser.cc"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_parser.h"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_prepopulate_data.cc"
- >
- </File>
- <File
- RelativePath=".\search_engines\template_url_prepopulate_data.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Metrics"
- >
- <File
- RelativePath=".\metrics\metrics_log.cc"
- >
- </File>
- <File
- RelativePath=".\metrics\metrics_log.h"
- >
- </File>
- <File
- RelativePath=".\metrics\metrics_response.cc"
- >
- </File>
- <File
- RelativePath=".\metrics\metrics_response.h"
- >
- </File>
- <File
- RelativePath=".\metrics\metrics_service.cc"
- >
- </File>
- <File
- RelativePath=".\metrics\metrics_service.h"
- >
- </File>
- <File
- RelativePath=".\metrics\user_metrics.cc"
- >
- </File>
- <File
- RelativePath=".\metrics\user_metrics.h"
- >
- </File>
- </Filter>
- <Filter
- Name="SSL"
- >
- <File
- RelativePath=".\ssl\ssl_blocking_page.cc"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_blocking_page.h"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_error_info.cc"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_error_info.h"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_host_state.cc"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_host_state.h"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_manager.cc"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_manager.h"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_policy.cc"
- >
- </File>
- <File
- RelativePath=".\ssl\ssl_policy.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Worker Host"
- >
- <File
- RelativePath=".\worker_host\worker_process_host.cc"
- >
- </File>
- <File
- RelativePath=".\worker_host\worker_process_host.h"
- >
- </File>
- <File
- RelativePath=".\worker_host\worker_service.cc"
- >
- </File>
- <File
- RelativePath=".\worker_host\worker_service.h"
- >
- </File>
- </Filter>
- <File
- RelativePath=".\browser_trial.cc"
- >
- </File>
- <File
- RelativePath=".\browser_trial.h"
- >
- </File>
- <File
- RelativePath=".\cert_store.cc"
- >
- </File>
- <File
- RelativePath=".\cert_store.h"
- >
- </File>
- <File
- RelativePath=".\chrome_plugin_browsing_context.cc"
- >
- </File>
- <File
- RelativePath=".\chrome_plugin_browsing_context.h"
- >
- </File>
- <File
- RelativePath=".\chrome_plugin_host.cc"
- >
- </File>
- <File
- RelativePath=".\encoding_menu_controller_delegate.cc"
- >
- </File>
- <File
- RelativePath=".\encoding_menu_controller_delegate.h"
- >
- </File>
- <File
- RelativePath=".\external_protocol_handler.cc"
- >
- </File>
- <File
- RelativePath=".\external_protocol_handler.h"
- >
- </File>
- <File
- RelativePath=".\gears_integration.cc"
- >
- </File>
- <File
- RelativePath=".\gears_integration.h"
- >
- </File>
- <File
- RelativePath=".\google_update.cc"
- >
- </File>
- <File
- RelativePath=".\google_update.h"
- >
- </File>
- <File
- RelativePath=".\hung_renderer_dialog.h"
- >
- </File>
- <File
- RelativePath=".\modal_html_dialog_delegate.cc"
- >
- </File>
- <File
- RelativePath=".\modal_html_dialog_delegate.h"
- >
- </File>
- <File
- RelativePath=".\page_state.cc"
- >
- </File>
- <File
- RelativePath=".\page_state.h"
- >
- </File>
- <File
- RelativePath=".\plugin_installer.cc"
- >
- </File>
- <File
- RelativePath=".\plugin_installer.h"
- >
- </File>
- <File
- RelativePath="$(OutDir)\grit_derived_sources\grit\theme_resources_map.cc"
- >
- </File>
- <File
- RelativePath=".\theme_resources_util.cc"
- >
- </File>
- <File
- RelativePath=".\theme_resources_util.h"
- >
- </File>
- <File
- RelativePath=".\toolbar_model.cc"
- >
- </File>
- <File
- RelativePath=".\toolbar_model.h"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="browser" + ProjectGUID="{5BF908A7-68FB-4A4B-99E3-8C749F1FE4EA}" + RootNamespace="Browser" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + <ToolFile + RelativePath="..\tools\build\win\resource_text_file_copy.rules" + /> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + ConfigurationType="4" + InheritedPropertySheets=".\browser.vsprops;$(SolutionDir)..\build\debug.vsprops;..\tools\build\win\precompiled_wtl.vsprops" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="Resource text file copy" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + ConfigurationType="4" + InheritedPropertySheets=".\browser.vsprops;$(SolutionDir)..\build\release.vsprops;$(SolutionDir)\tools\build\win\js_engine.vsprops" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="Resource text file copy" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Autocomplete" + > + <File + RelativePath=".\autocomplete\autocomplete.cc" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete.h" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_accessibility.cc" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_accessibility.h" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_edit.cc" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_edit.h" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_edit_view.h" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_edit_view_win.cc" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_edit_view_win.h" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_popup_model.cc" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_popup_model.h" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_popup_view.h" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_popup_view_win.cc" + > + </File> + <File + RelativePath=".\autocomplete\autocomplete_popup_view_win.h" + > + </File> + <File + RelativePath=".\autocomplete\history_contents_provider.cc" + > + </File> + <File + RelativePath=".\autocomplete\history_contents_provider.h" + > + </File> + <File + RelativePath=".\autocomplete\history_url_provider.cc" + > + </File> + <File + RelativePath=".\autocomplete\history_url_provider.h" + > + </File> + <File + RelativePath=".\autocomplete\keyword_provider.cc" + > + </File> + <File + RelativePath=".\autocomplete\keyword_provider.h" + > + </File> + <File + RelativePath=".\autocomplete\search_provider.cc" + > + </File> + <File + RelativePath=".\autocomplete\search_provider.h" + > + </File> + </Filter> + <Filter + Name="Base" + > + <File + RelativePath=".\alternate_nav_url_fetcher.cc" + > + </File> + <File + RelativePath=".\alternate_nav_url_fetcher.h" + > + </File> + <File + RelativePath=".\browser_about_handler.cc" + > + </File> + <File + RelativePath=".\browser_about_handler.h" + > + </File> + <File + RelativePath=".\browser_init.cc" + > + </File> + <File + RelativePath=".\browser_init.h" + > + </File> + <File + RelativePath=".\browser_main.cc" + > + </File> + <File + RelativePath=".\browser_main_win.cc" + > + </File> + <File + RelativePath=".\browser_prefs.cc" + > + </File> + <File + RelativePath=".\browser_prefs.h" + > + </File> + <File + RelativePath=".\browser_process.cc" + > + </File> + <File + RelativePath=".\browser_process.h" + > + </File> + <File + RelativePath=".\browser_process_impl.cc" + > + </File> + <File + RelativePath=".\browser_process_impl.h" + > + </File> + <File + RelativePath=".\browser_shutdown.cc" + > + </File> + <File + RelativePath=".\browser_shutdown.h" + > + </File> + <File + RelativePath=".\browser_theme_provider.cc" + > + </File> + <File + RelativePath=".\browser_theme_provider.h" + > + </File> + <File + RelativePath=".\browser_url_handler.cc" + > + </File> + <File + RelativePath=".\browser_url_handler.h" + > + </File> + <File + RelativePath=".\browsing_data_remover.cc" + > + </File> + <File + RelativePath=".\browsing_data_remover.h" + > + </File> + <File + RelativePath=".\browsing_instance.cc" + > + </File> + <File + RelativePath=".\browsing_instance.h" + > + </File> + <File + RelativePath=".\cancelable_request.cc" + > + </File> + <File + RelativePath=".\cancelable_request.h" + > + </File> + <File + RelativePath=".\character_encoding.cc" + > + </File> + <File + RelativePath=".\character_encoding.h" + > + </File> + <File + RelativePath=".\chrome_thread.cc" + > + </File> + <File + RelativePath=".\chrome_thread.h" + > + </File> + <File + RelativePath=".\cross_site_request_manager.cc" + > + </File> + <File + RelativePath=".\cross_site_request_manager.h" + > + </File> + <File + RelativePath=".\fav_icon_helper.cc" + > + </File> + <File + RelativePath=".\fav_icon_helper.h" + > + </File> + <File + RelativePath=".\first_run.cc" + > + </File> + <File + RelativePath=".\first_run.h" + > + </File> + <File + RelativePath=".\google_url_tracker.cc" + > + </File> + <File + RelativePath=".\google_url_tracker.h" + > + </File> + <File + RelativePath=".\google_util.cc" + > + </File> + <File + RelativePath=".\google_util.h" + > + </File> + <File + RelativePath=".\icon_loader.cc" + > + </File> + <File + RelativePath=".\icon_loader.h" + > + </File> + <File + RelativePath=".\icon_loader_win.cc" + > + </File> + <File + RelativePath=".\icon_manager.cc" + > + </File> + <File + RelativePath=".\icon_manager.h" + > + </File> + <File + RelativePath=".\icon_manager_win.cc" + > + </File> + <File + RelativePath=".\ime_input.cc" + > + </File> + <File + RelativePath=".\ime_input.h" + > + </File> + <File + RelativePath=".\input_window_dialog.h" + > + </File> + <File + RelativePath=".\input_window_dialog_win.cc" + > + </File> + <File + RelativePath=".\jankometer.cc" + > + </File> + <File + RelativePath=".\jankometer.h" + > + </File> + <File + RelativePath=".\memory_details.cc" + > + </File> + <File + RelativePath=".\memory_details.h" + > + </File> + <File + RelativePath=".\meta_table_helper.cc" + > + </File> + <File + RelativePath=".\meta_table_helper.h" + > + </File> + <File + RelativePath=".\plugin_process_host.cc" + > + </File> + <File + RelativePath=".\plugin_process_host.h" + > + </File> + <File + RelativePath=".\plugin_service.cc" + > + </File> + <File + RelativePath=".\plugin_service.h" + > + </File> + <File + RelativePath="..\tools\build\win\precompiled_wtl.cc" + > + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="true" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + </File> + <File + RelativePath="..\tools\build\win\precompiled_wtl.h" + > + </File> + <File + RelativePath=".\process_singleton.h" + > + </File> + <File + RelativePath=".\process_singleton_win.cc" + > + </File> + <File + RelativePath=".\profile.cc" + > + </File> + <File + RelativePath=".\profile.h" + > + </File> + <File + RelativePath=".\profile_manager.cc" + > + </File> + <File + RelativePath=".\profile_manager.h" + > + </File> + <File + RelativePath=".\session_startup_pref.cc" + > + </File> + <File + RelativePath=".\session_startup_pref.h" + > + </File> + <File + RelativePath=".\shell_dialogs.h" + > + </File> + <File + RelativePath=".\shell_integration.cc" + > + </File> + <File + RelativePath=".\shell_integration.h" + > + </File> + <File + RelativePath=".\spellcheck_worditerator.cc" + > + </File> + <File + RelativePath=".\spellcheck_worditerator.h" + > + </File> + <File + RelativePath=".\spellchecker.cc" + > + </File> + <File + RelativePath=".\spellchecker.h" + > + </File> + <File + RelativePath=".\user_data_manager.cc" + > + </File> + <File + RelativePath=".\user_data_manager.h" + > + </File> + <File + RelativePath=".\visitedlink_master.cc" + > + </File> + <File + RelativePath=".\visitedlink_master.h" + > + </File> + </Filter> + <Filter + Name="Bookmarks" + > + <File + RelativePath=".\bookmarks\bookmark_codec.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_codec.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_context_menu.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_context_menu.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_context_menu_win.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_drag_data.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_drag_data.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_drop_info.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_drop_info.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_editor.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_folder_tree_model.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_folder_tree_model.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_html_writer.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_html_writer.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_menu_controller_win.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_menu_controller_win.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_model.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_model.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_service.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_storage.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_storage.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_table_model.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_table_model.h" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_utils.cc" + > + </File> + <File + RelativePath=".\bookmarks\bookmark_utils.h" + > + </File> + </Filter> + <Filter + Name="Browser Window" + > + <File + RelativePath=".\app_modal_dialog.cc" + > + </File> + <File + RelativePath=".\app_modal_dialog.h" + > + </File> + <File + RelativePath=".\app_modal_dialog_queue.cc" + > + </File> + <File + RelativePath=".\app_modal_dialog_queue.h" + > + </File> + <File + RelativePath=".\app_modal_dialog_win.cc" + > + </File> + <File + RelativePath=".\back_forward_menu_model.cc" + > + </File> + <File + RelativePath=".\back_forward_menu_model.h" + > + </File> + <File + RelativePath=".\back_forward_menu_model_win.cc" + > + </File> + <File + RelativePath=".\back_forward_menu_model_win.h" + > + </File> + <File + RelativePath=".\browser.cc" + > + </File> + <File + RelativePath=".\browser.h" + > + </File> + <File + RelativePath=".\browser_list.cc" + > + </File> + <File + RelativePath=".\browser_list.h" + > + </File> + <File + RelativePath=".\browser_window.h" + > + </File> + <File + RelativePath=".\command_updater.cc" + > + </File> + <File + RelativePath=".\command_updater.h" + > + </File> + <File + RelativePath=".\dock_info.cc" + > + </File> + <File + RelativePath=".\dock_info.h" + > + </File> + <File + RelativePath=".\find_bar.h" + > + </File> + <File + RelativePath=".\find_bar_controller.cc" + > + </File> + <File + RelativePath=".\find_bar_controller.h" + > + </File> + <File + RelativePath=".\find_notification_details.h" + > + </File> + <File + RelativePath=".\jsmessage_box_handler.cc" + > + </File> + <File + RelativePath=".\jsmessage_box_handler.h" + > + </File> + <File + RelativePath=".\load_from_memory_cache_details.h" + > + </File> + <File + RelativePath=".\load_notification_details.h" + > + </File> + <File + RelativePath=".\location_bar.h" + > + </File> + <File + RelativePath=".\login_prompt.cc" + > + </File> + <File + RelativePath=".\login_prompt.h" + > + </File> + <File + RelativePath=".\options_window.h" + > + </File> + <File + RelativePath=".\status_bubble.h" + > + </File> + <File + RelativePath=".\task_manager.cc" + > + </File> + <File + RelativePath=".\task_manager.h" + > + </File> + <File + RelativePath=".\task_manager_resource_providers.cc" + > + </File> + <File + RelativePath=".\task_manager_resource_providers.h" + > + </File> + <File + RelativePath=".\window_sizer.cc" + > + </File> + <File + RelativePath=".\window_sizer.h" + > + </File> + </Filter> + <Filter + Name="Automation" + > + <File + RelativePath=".\automation\automation_autocomplete_edit_tracker.h" + > + </File> + <File + RelativePath=".\automation\automation_browser_tracker.h" + > + </File> + <File + RelativePath=".\automation\automation_constrained_window_tracker.h" + > + </File> + <File + RelativePath=".\automation\automation_provider.cc" + > + </File> + <File + RelativePath=".\automation\automation_provider.h" + > + </File> + <File + RelativePath=".\automation\automation_provider_list.cc" + > + </File> + <File + RelativePath=".\automation\automation_provider_list.h" + > + </File> + <File + RelativePath=".\automation\automation_provider_list_generic.cc" + > + </File> + <File + RelativePath=".\automation\automation_resource_tracker.cc" + > + </File> + <File + RelativePath=".\automation\automation_resource_tracker.h" + > + </File> + <File + RelativePath=".\automation\automation_tab_tracker.h" + > + </File> + <File + RelativePath=".\automation\automation_window_tracker.h" + > + </File> + <File + RelativePath=".\automation\ui_controls.cc" + > + </File> + <File + RelativePath=".\automation\ui_controls.h" + > + </File> + <File + RelativePath=".\automation\url_request_failed_dns_job.cc" + > + </File> + <File + RelativePath=".\automation\url_request_failed_dns_job.h" + > + </File> + <File + RelativePath=".\automation\url_request_mock_http_job.cc" + > + </File> + <File + RelativePath=".\automation\url_request_mock_http_job.h" + > + </File> + <File + RelativePath=".\automation\url_request_mock_net_error_job.cc" + > + </File> + <File + RelativePath=".\automation\url_request_mock_net_error_job.h" + > + </File> + <File + RelativePath=".\automation\url_request_slow_download_job.cc" + > + </File> + <File + RelativePath=".\automation\url_request_slow_download_job.h" + > + </File> + <File + RelativePath=".\view_ids.h" + > + </File> + </Filter> + <Filter + Name="History" + > + <File + RelativePath=".\history\archived_database.cc" + > + </File> + <File + RelativePath=".\history\archived_database.h" + > + </File> + <File + RelativePath=".\history\download_database.cc" + > + </File> + <File + RelativePath=".\history\download_database.h" + > + </File> + <File + RelativePath=".\history\download_types.h" + > + </File> + <File + RelativePath=".\history\expire_history_backend.cc" + > + </File> + <File + RelativePath=".\history\expire_history_backend.h" + > + </File> + <File + RelativePath=".\history\history.cc" + > + </File> + <File + RelativePath=".\history\history.h" + > + </File> + <File + RelativePath=".\history\history_backend.cc" + > + </File> + <File + RelativePath=".\history\history_backend.h" + > + </File> + <File + RelativePath=".\history\history_database.cc" + > + </File> + <File + RelativePath=".\history\history_database.h" + > + </File> + <File + RelativePath=".\history\history_indexer.idl" + > + </File> + <File + RelativePath=".\history\history_marshaling.h" + > + </File> + <File + RelativePath=".\history\history_notifications.h" + > + </File> + <File + RelativePath=".\history\history_publisher.cc" + > + </File> + <File + RelativePath=".\history\history_publisher.h" + > + </File> + <File + RelativePath=".\history\history_publisher_win.cc" + > + </File> + <File + RelativePath=".\history\history_types.cc" + > + </File> + <File + RelativePath=".\history\history_types.h" + > + </File> + <File + RelativePath=".\history\in_memory_database.cc" + > + </File> + <File + RelativePath=".\history\in_memory_database.h" + > + </File> + <File + RelativePath=".\history\in_memory_history_backend.cc" + > + </File> + <File + RelativePath=".\history\in_memory_history_backend.h" + > + </File> + <File + RelativePath=".\history\page_usage_data.cc" + > + </File> + <File + RelativePath=".\history\page_usage_data.h" + > + </File> + <File + RelativePath=".\history\query_parser.cc" + > + </File> + <File + RelativePath=".\history\query_parser.h" + > + </File> + <File + RelativePath=".\history\snippet.cc" + > + </File> + <File + RelativePath=".\history\snippet.h" + > + </File> + <File + RelativePath=".\history\starred_url_database.cc" + > + </File> + <File + RelativePath=".\history\starred_url_database.h" + > + </File> + <File + RelativePath=".\history\text_database.cc" + > + </File> + <File + RelativePath=".\history\text_database.h" + > + </File> + <File + RelativePath=".\history\text_database_manager.cc" + > + </File> + <File + RelativePath=".\history\text_database_manager.h" + > + </File> + <File + RelativePath=".\history\thumbnail_database.cc" + > + </File> + <File + RelativePath=".\history\thumbnail_database.h" + > + </File> + <File + RelativePath=".\history\url_database.cc" + > + </File> + <File + RelativePath=".\history\url_database.h" + > + </File> + <File + RelativePath=".\history\visit_database.cc" + > + </File> + <File + RelativePath=".\history\visit_database.h" + > + </File> + <File + RelativePath=".\history\visit_tracker.cc" + > + </File> + <File + RelativePath=".\history\visit_tracker.h" + > + </File> + <File + RelativePath=".\history\visitsegment_database.cc" + > + </File> + <File + RelativePath=".\history\visitsegment_database.h" + > + </File> + <Filter + Name="HangMonitor" + > + <File + RelativePath=".\hang_monitor\hung_plugin_action.cc" + > + </File> + <File + RelativePath=".\hang_monitor\hung_plugin_action.h" + > + </File> + <File + RelativePath=".\hang_monitor\hung_window_detector.cc" + > + </File> + <File + RelativePath=".\hang_monitor\hung_window_detector.h" + > + </File> + </Filter> + </Filter> + <Filter + Name="Sessions and Tab Restore" + > + <File + RelativePath=".\sessions\base_session_service.cc" + > + </File> + <File + RelativePath=".\sessions\base_session_service.h" + > + </File> + <File + RelativePath=".\sessions\session_backend.cc" + > + </File> + <File + RelativePath=".\sessions\session_backend.h" + > + </File> + <File + RelativePath=".\sessions\session_command.cc" + > + </File> + <File + RelativePath=".\sessions\session_command.h" + > + </File> + <File + RelativePath=".\sessions\session_id.cc" + > + </File> + <File + RelativePath=".\sessions\session_id.h" + > + </File> + <File + RelativePath=".\sessions\session_restore.cc" + > + </File> + <File + RelativePath=".\sessions\session_restore.h" + > + </File> + <File + RelativePath=".\sessions\session_service.cc" + > + </File> + <File + RelativePath=".\sessions\session_service.h" + > + </File> + <File + RelativePath=".\sessions\session_types.cc" + > + </File> + <File + RelativePath=".\sessions\session_types.h" + > + </File> + <File + RelativePath=".\sessions\tab_restore_service.cc" + > + </File> + <File + RelativePath=".\sessions\tab_restore_service.h" + > + </File> + </Filter> + <Filter + Name="WebData" + > + <File + RelativePath=".\webdata\web_data_service.cc" + > + </File> + <File + RelativePath=".\webdata\web_data_service.h" + > + </File> + <File + RelativePath=".\webdata\web_data_service_win.cc" + > + </File> + <File + RelativePath=".\webdata\web_database.cc" + > + </File> + <File + RelativePath=".\webdata\web_database.h" + > + </File> + <File + RelativePath=".\webdata\web_database_win.cc" + > + </File> + </Filter> + <Filter + Name="Importer" + > + <File + RelativePath=".\importer\firefox2_importer.cc" + > + </File> + <File + RelativePath=".\importer\firefox2_importer.h" + > + </File> + <File + RelativePath=".\importer\firefox3_importer.cc" + > + </File> + <File + RelativePath=".\importer\firefox3_importer.h" + > + </File> + <File + RelativePath=".\importer\firefox_importer_utils.cc" + > + </File> + <File + RelativePath=".\importer\firefox_importer_utils.h" + > + </File> + <File + RelativePath=".\importer\firefox_profile_lock.cc" + > + </File> + <File + RelativePath=".\importer\firefox_profile_lock.h" + > + </File> + <File + RelativePath=".\importer\firefox_profile_lock_win.cc" + > + </File> + <File + RelativePath=".\importer\ie_importer.cc" + > + </File> + <File + RelativePath=".\importer\ie_importer.h" + > + </File> + <File + RelativePath=".\importer\importer.cc" + > + </File> + <File + RelativePath=".\importer\importer.h" + > + </File> + <File + RelativePath=".\importer\mork_reader.cc" + > + </File> + <File + RelativePath=".\importer\mork_reader.h" + > + </File> + <File + RelativePath=".\importer\toolbar_importer.cc" + > + </File> + <File + RelativePath=".\importer\toolbar_importer.h" + > + </File> + </Filter> + <Filter + Name="Tabs" + > + <File + RelativePath=".\tabs\tab_strip_model.cc" + > + </File> + <File + RelativePath=".\tabs\tab_strip_model.h" + > + </File> + <File + RelativePath=".\tabs\tab_strip_model_order_controller.cc" + > + </File> + <File + RelativePath=".\tabs\tab_strip_model_order_controller.h" + > + </File> + </Filter> + <Filter + Name="Printing" + > + <File + RelativePath=".\printing\page_number.cc" + > + </File> + <File + RelativePath=".\printing\page_number.h" + > + </File> + <File + RelativePath=".\printing\page_overlays.cc" + > + </File> + <File + RelativePath=".\printing\page_overlays.h" + > + </File> + <File + RelativePath=".\printing\page_range.cc" + > + </File> + <File + RelativePath=".\printing\page_range.h" + > + </File> + <File + RelativePath=".\printing\page_setup.cc" + > + </File> + <File + RelativePath=".\printing\page_setup.h" + > + </File> + <File + RelativePath=".\printing\print_job.cc" + > + </File> + <File + RelativePath=".\printing\print_job.h" + > + </File> + <File + RelativePath=".\printing\print_job_manager.cc" + > + </File> + <File + RelativePath=".\printing\print_job_manager.h" + > + </File> + <File + RelativePath=".\printing\print_job_worker.cc" + > + </File> + <File + RelativePath=".\printing\print_job_worker.h" + > + </File> + <File + RelativePath=".\printing\print_job_worker_owner.h" + > + </File> + <File + RelativePath=".\printing\print_settings.cc" + > + </File> + <File + RelativePath=".\printing\print_settings.h" + > + </File> + <File + RelativePath=".\printing\print_view_manager.cc" + > + </File> + <File + RelativePath=".\printing\print_view_manager.h" + > + </File> + <File + RelativePath=".\printing\printed_document.cc" + > + </File> + <File + RelativePath=".\printing\printed_document.h" + > + </File> + <File + RelativePath=".\printing\printed_page.cc" + > + </File> + <File + RelativePath=".\printing\printed_page.h" + > + </File> + <File + RelativePath=".\printing\printed_pages_source.h" + > + </File> + <File + RelativePath=".\printing\printer_query.cc" + > + </File> + <File + RelativePath=".\printing\printer_query.h" + > + </File> + <File + RelativePath=".\printing\win_printing_context.cc" + > + </File> + <File + RelativePath=".\printing\win_printing_context.h" + > + </File> + </Filter> + <Filter + Name="Sandbox" + > + <File + RelativePath=".\sandbox_policy.cc" + > + </File> + <File + RelativePath=".\sandbox_policy.h" + > + </File> + </Filter> + <Filter + Name="Password Manager" + > + <File + RelativePath=".\password_manager\encryptor.h" + > + </File> + <File + RelativePath=".\password_manager\encryptor_win.cc" + > + </File> + <File + RelativePath=".\password_manager\ie7_password.cc" + > + </File> + <File + RelativePath=".\password_manager\ie7_password.h" + > + </File> + <File + RelativePath=".\password_manager\password_form_manager.cc" + > + </File> + <File + RelativePath=".\password_manager\password_form_manager.h" + > + </File> + <File + RelativePath=".\password_manager\password_form_manager_win.cc" + > + </File> + <File + RelativePath=".\password_manager\password_manager.cc" + > + </File> + <File + RelativePath=".\password_manager\password_manager.h" + > + </File> + </Filter> + <Filter + Name="External Tab" + > + <File + RelativePath=".\external_tab_container.cc" + > + </File> + <File + RelativePath=".\external_tab_container.h" + > + </File> + </Filter> + <Filter + Name="DOM UI" + > + <File + RelativePath=".\dom_ui\chrome_url_data_manager.cc" + > + </File> + <File + RelativePath=".\dom_ui\chrome_url_data_manager.h" + > + </File> + <File + RelativePath=".\dom_ui\debugger_ui.cc" + > + </File> + <File + RelativePath=".\dom_ui\debugger_ui.h" + > + </File> + <File + RelativePath=".\dom_ui\devtools_ui.cc" + > + </File> + <File + RelativePath=".\dom_ui\devtools_ui.h" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui.cc" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui.h" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_factory.cc" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_factory.h" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_favicon_source.cc" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_favicon_source.h" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_theme_source.cc" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_theme_source.h" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_thumbnail_source.cc" + > + </File> + <File + RelativePath=".\dom_ui\dom_ui_thumbnail_source.h" + > + </File> + <File + RelativePath=".\dom_ui\downloads_ui.cc" + > + </File> + <File + RelativePath=".\dom_ui\downloads_ui.h" + > + </File> + <File + RelativePath=".\dom_ui\fileicon_source.cc" + > + </File> + <File + RelativePath=".\dom_ui\fileicon_source.h" + > + </File> + <File + RelativePath=".\dom_ui\history_ui.cc" + > + </File> + <File + RelativePath=".\dom_ui\history_ui.h" + > + </File> + <File + RelativePath=".\dom_ui\html_dialog_ui.cc" + > + </File> + <File + RelativePath=".\dom_ui\html_dialog_ui.h" + > + </File> + <File + RelativePath=".\dom_ui\new_tab_ui.cc" + > + </File> + <File + RelativePath=".\dom_ui\new_tab_ui.h" + > + </File> + </Filter> + <Filter + Name="Net" + > + <File + RelativePath=".\net\chrome_url_request_context.cc" + > + </File> + <File + RelativePath=".\net\chrome_url_request_context.h" + > + </File> + <File + RelativePath=".\net\dns_global.cc" + > + </File> + <File + RelativePath=".\net\dns_global.h" + > + </File> + <File + RelativePath=".\net\dns_host_info.cc" + > + </File> + <File + RelativePath=".\net\dns_host_info.h" + > + </File> + <File + RelativePath=".\net\dns_master.cc" + > + </File> + <File + RelativePath=".\net\dns_master.h" + > + </File> + <File + RelativePath=".\net\referrer.cc" + > + </File> + <File + RelativePath=".\net\referrer.h" + > + </File> + <File + RelativePath=".\net\resolve_proxy_msg_helper.cc" + > + </File> + <File + RelativePath=".\net\resolve_proxy_msg_helper.h" + > + </File> + <File + RelativePath=".\net\sdch_dictionary_fetcher.cc" + > + </File> + <File + RelativePath=".\net\sdch_dictionary_fetcher.h" + > + </File> + <File + RelativePath=".\net\url_fetcher.cc" + > + </File> + <File + RelativePath=".\net\url_fetcher.h" + > + </File> + <File + RelativePath=".\net\url_fetcher_protect.cc" + > + </File> + <File + RelativePath=".\net\url_fetcher_protect.h" + > + </File> + <File + RelativePath=".\net\url_fixer_upper.cc" + > + </File> + <File + RelativePath=".\net\url_fixer_upper.h" + > + </File> + </Filter> + <Filter + Name="RLZ" + > + <File + RelativePath=".\rlz\rlz.cc" + > + </File> + <File + RelativePath=".\rlz\rlz.h" + > + </File> + </Filter> + <Filter + Name="Safe Browsing" + > + <File + RelativePath=".\safe_browsing\bloom_filter.cc" + > + </File> + <File + RelativePath=".\safe_browsing\bloom_filter.h" + > + </File> + <File + RelativePath=".\safe_browsing\chunk_range.cc" + > + </File> + <File + RelativePath=".\safe_browsing\chunk_range.h" + > + </File> + <File + RelativePath=".\safe_browsing\protocol_manager.cc" + > + </File> + <File + RelativePath=".\safe_browsing\protocol_manager.h" + > + </File> + <File + RelativePath=".\safe_browsing\protocol_parser.cc" + > + </File> + <File + RelativePath=".\safe_browsing\protocol_parser.h" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_blocking_page.cc" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_blocking_page.h" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_database.cc" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_database.h" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_database_bloom.cc" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_database_bloom.h" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_service.cc" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_service.h" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_util.cc" + > + </File> + <File + RelativePath=".\safe_browsing\safe_browsing_util.h" + > + </File> + </Filter> + <Filter + Name="Accessibility" + > + <File + RelativePath=".\browser_accessibility.cc" + > + </File> + <File + RelativePath=".\browser_accessibility.h" + > + </File> + <File + RelativePath=".\browser_accessibility_manager.cc" + > + </File> + <File + RelativePath=".\browser_accessibility_manager.h" + > + </File> + </Filter> + <Filter + Name="Download" + > + <File + RelativePath=".\download\download_exe.cc" + > + </File> + <File + RelativePath=".\download\download_file.cc" + > + </File> + <File + RelativePath=".\download\download_file.h" + > + </File> + <File + RelativePath=".\download\download_item_model.cc" + > + </File> + <File + RelativePath=".\download\download_item_model.h" + > + </File> + <File + RelativePath=".\download\download_manager.cc" + > + </File> + <File + RelativePath=".\download\download_manager.h" + > + </File> + <File + RelativePath=".\download\download_request_dialog_delegate.h" + > + </File> + <File + RelativePath=".\download\download_request_dialog_delegate_win.cc" + > + </File> + <File + RelativePath=".\download\download_request_dialog_delegate_win.h" + > + </File> + <File + RelativePath=".\download\download_request_manager.cc" + > + </File> + <File + RelativePath=".\download\download_request_manager.h" + > + </File> + <File + RelativePath=".\download\download_shelf.cc" + > + </File> + <File + RelativePath=".\download\download_shelf.h" + > + </File> + <File + RelativePath=".\download\download_util.cc" + > + </File> + <File + RelativePath=".\download\download_util.h" + > + </File> + </Filter> + <Filter + Name="Save Page" + > + <File + RelativePath=".\download\save_file.cc" + > + </File> + <File + RelativePath=".\download\save_file.h" + > + </File> + <File + RelativePath=".\download\save_file_manager.cc" + > + </File> + <File + RelativePath=".\download\save_file_manager.h" + > + </File> + <File + RelativePath=".\download\save_item.cc" + > + </File> + <File + RelativePath=".\download\save_item.h" + > + </File> + <File + RelativePath=".\download\save_package.cc" + > + </File> + <File + RelativePath=".\download\save_package.h" + > + </File> + <File + RelativePath=".\download\save_types.h" + > + </File> + </Filter> + <Filter + Name="Autofill" + > + <File + RelativePath=".\autofill_manager.cc" + > + </File> + <File + RelativePath=".\autofill_manager.h" + > + </File> + </Filter> + <Filter + Name="Extensions" + > + <File + RelativePath=".\extensions\extension.cc" + > + </File> + <File + RelativePath=".\extensions\extension.h" + > + </File> + <File + RelativePath=".\extensions\extension_bookmarks_module.cc" + > + </File> + <File + RelativePath=".\extensions\extension_bookmarks_module.h" + > + </File> + <File + RelativePath=".\extensions\extension_browser_event_router.cc" + > + </File> + <File + RelativePath=".\extensions\extension_browser_event_router.h" + > + </File> + <File + RelativePath=".\extensions\extension_error_reporter.cc" + > + </File> + <File + RelativePath=".\extensions\extension_error_reporter.h" + > + </File> + <File + RelativePath=".\extensions\extension_error_utils.cc" + > + </File> + <File + RelativePath=".\extensions\extension_error_utils.h" + > + </File> + <File + RelativePath=".\extensions\extension_function.cc" + > + </File> + <File + RelativePath=".\extensions\extension_function.h" + > + </File> + <File + RelativePath=".\extensions\extension_function_dispatcher.cc" + > + </File> + <File + RelativePath=".\extensions\extension_function_dispatcher.h" + > + </File> + <File + RelativePath=".\extensions\extension_host.cc" + > + </File> + <File + RelativePath=".\extensions\extension_host.h" + > + </File> + <File + RelativePath=".\extensions\extension_message_service.cc" + > + </File> + <File + RelativePath=".\extensions\extension_message_service.h" + > + </File> + <File + RelativePath=".\extensions\extension_page_actions_module.cc" + > + </File> + <File + RelativePath=".\extensions\extension_page_actions_module.h" + > + </File> + <File + RelativePath=".\extensions\extension_process_manager.cc" + > + </File> + <File + RelativePath=".\extensions\extension_process_manager.h" + > + </File> + <File + RelativePath=".\extensions\extension_protocols.cc" + > + </File> + <File + RelativePath=".\extensions\extension_protocols.h" + > + </File> + <File + RelativePath=".\extensions\extension_shelf.cc" + > + </File> + <File + RelativePath=".\extensions\extension_shelf.h" + > + </File> + <File + RelativePath=".\extensions\extension_tabs_module.cc" + > + </File> + <File + RelativePath=".\extensions\extension_tabs_module.h" + > + </File> + <File + RelativePath=".\extensions\extension_view.cc" + > + </File> + <File + RelativePath=".\extensions\extension_view.h" + > + </File> + <File + RelativePath=".\extensions\extensions_service.cc" + > + </File> + <File + RelativePath=".\extensions\extensions_service.h" + > + </File> + <File + RelativePath=".\extensions\extensions_ui.cc" + > + </File> + <File + RelativePath=".\extensions\extensions_ui.h" + > + </File> + <File + RelativePath=".\extensions\user_script_master.cc" + > + </File> + <File + RelativePath=".\extensions\user_script_master.h" + > + </File> + </Filter> + <Filter + Name="Renderer Host" + > + <File + RelativePath=".\renderer_host\async_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\async_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\audio_renderer_host.cc" + > + </File> + <File + RelativePath=".\renderer_host\audio_renderer_host.h" + > + </File> + <File + RelativePath=".\renderer_host\backing_store.cc" + > + </File> + <File + RelativePath=".\renderer_host\backing_store.h" + > + </File> + <File + RelativePath=".\renderer_host\backing_store_win.cc" + > + </File> + <File + RelativePath=".\renderer_host\browser_render_process_host.cc" + > + </File> + <File + RelativePath=".\renderer_host\browser_render_process_host.h" + > + </File> + <File + RelativePath=".\renderer_host\buffered_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\buffered_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\cross_site_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\cross_site_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\download_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\download_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\download_throttling_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\download_throttling_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\media_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\media_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\render_process_host.cc" + > + </File> + <File + RelativePath=".\renderer_host\render_process_host.h" + > + </File> + <File + RelativePath=".\renderer_host\render_view_host.cc" + > + </File> + <File + RelativePath=".\renderer_host\render_view_host.h" + > + </File> + <File + RelativePath=".\renderer_host\render_view_host_delegate.h" + > + </File> + <File + RelativePath=".\renderer_host\render_view_host_factory.cc" + > + </File> + <File + RelativePath=".\renderer_host\render_view_host_factory.h" + > + </File> + <File + RelativePath=".\renderer_host\render_widget_helper.cc" + > + </File> + <File + RelativePath=".\renderer_host\render_widget_helper.h" + > + </File> + <File + RelativePath=".\renderer_host\render_widget_host.cc" + > + </File> + <File + RelativePath=".\renderer_host\render_widget_host.h" + > + </File> + <File + RelativePath=".\renderer_host\render_widget_host_view.h" + > + </File> + <File + RelativePath=".\renderer_host\render_widget_host_view_win.cc" + > + </File> + <File + RelativePath=".\renderer_host\render_widget_host_view_win.h" + > + </File> + <File + RelativePath=".\renderer_host\renderer_security_policy.cc" + > + </File> + <File + RelativePath=".\renderer_host\renderer_security_policy.h" + > + </File> + <File + RelativePath=".\renderer_host\resource_dispatcher_host.cc" + > + </File> + <File + RelativePath=".\renderer_host\resource_dispatcher_host.h" + > + </File> + <File + RelativePath=".\renderer_host\resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\resource_message_filter.cc" + > + </File> + <File + RelativePath=".\renderer_host\resource_message_filter.h" + > + </File> + <File + RelativePath=".\renderer_host\resource_message_filter_win.cc" + > + </File> + <File + RelativePath=".\renderer_host\resource_request_details.h" + > + </File> + <File + RelativePath=".\renderer_host\safe_browsing_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\safe_browsing_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\save_file_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\save_file_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\sync_resource_handler.cc" + > + </File> + <File + RelativePath=".\renderer_host\sync_resource_handler.h" + > + </File> + <File + RelativePath=".\renderer_host\web_cache_manager.cc" + > + </File> + <File + RelativePath=".\renderer_host\web_cache_manager.h" + > + </File> + </Filter> + <Filter + Name="Tab Contents" + > + <File + RelativePath=".\tab_contents\constrained_window.h" + > + </File> + <File + RelativePath=".\tab_contents\infobar_delegate.cc" + > + </File> + <File + RelativePath=".\tab_contents\infobar_delegate.h" + > + </File> + <File + RelativePath=".\tab_contents\interstitial_page.cc" + > + </File> + <File + RelativePath=".\tab_contents\interstitial_page.h" + > + </File> + <File + RelativePath=".\tab_contents\navigation_controller.cc" + > + </File> + <File + RelativePath=".\tab_contents\navigation_controller.h" + > + </File> + <File + RelativePath=".\tab_contents\navigation_entry.cc" + > + </File> + <File + RelativePath=".\tab_contents\navigation_entry.h" + > + </File> + <File + RelativePath=".\tab_contents\page_navigator.h" + > + </File> + <File + RelativePath=".\tab_contents\provisional_load_details.cc" + > + </File> + <File + RelativePath=".\tab_contents\provisional_load_details.h" + > + </File> + <File + RelativePath=".\tab_contents\render_view_context_menu.cc" + > + </File> + <File + RelativePath=".\tab_contents\render_view_context_menu.h" + > + </File> + <File + RelativePath=".\tab_contents\render_view_context_menu_win.cc" + > + </File> + <File + RelativePath=".\tab_contents\render_view_context_menu_win.h" + > + </File> + <File + RelativePath=".\tab_contents\render_view_host_delegate_helper.cc" + > + </File> + <File + RelativePath=".\tab_contents\render_view_host_delegate_helper.h" + > + </File> + <File + RelativePath=".\tab_contents\render_view_host_manager.cc" + > + </File> + <File + RelativePath=".\tab_contents\render_view_host_manager.h" + > + </File> + <File + RelativePath=".\tab_contents\repost_form_warning.h" + > + </File> + <File + RelativePath=".\tab_contents\security_style.h" + > + </File> + <File + RelativePath=".\tab_contents\site_instance.cc" + > + </File> + <File + RelativePath=".\tab_contents\site_instance.h" + > + </File> + <File + RelativePath=".\tab_contents\tab_contents.cc" + > + </File> + <File + RelativePath=".\tab_contents\tab_contents.h" + > + </File> + <File + RelativePath=".\tab_contents\tab_contents_delegate.h" + > + </File> + <File + RelativePath=".\tab_contents\tab_contents_view.cc" + > + </File> + <File + RelativePath=".\tab_contents\tab_contents_view.h" + > + </File> + <File + RelativePath=".\tab_contents\tab_contents_view_win.cc" + > + </File> + <File + RelativePath=".\tab_contents\tab_contents_view_win.h" + > + </File> + <File + RelativePath=".\tab_contents\tab_util.cc" + > + </File> + <File + RelativePath=".\tab_contents\tab_util.h" + > + </File> + <File + RelativePath=".\tab_contents\web_drag_source.cc" + > + </File> + <File + RelativePath=".\tab_contents\web_drag_source.h" + > + </File> + <File + RelativePath=".\tab_contents\web_drop_target.cc" + > + </File> + <File + RelativePath=".\tab_contents\web_drop_target.h" + > + </File> + </Filter> + <Filter + Name="Search Engines" + > + <File + RelativePath=".\search_engines\template_url.cc" + > + </File> + <File + RelativePath=".\search_engines\template_url.h" + > + </File> + <File + RelativePath=".\search_engines\template_url_fetcher.cc" + > + </File> + <File + RelativePath=".\search_engines\template_url_fetcher.h" + > + </File> + <File + RelativePath=".\search_engines\template_url_model.cc" + > + </File> + <File + RelativePath=".\search_engines\template_url_model.h" + > + </File> + <File + RelativePath=".\search_engines\template_url_parser.cc" + > + </File> + <File + RelativePath=".\search_engines\template_url_parser.h" + > + </File> + <File + RelativePath=".\search_engines\template_url_prepopulate_data.cc" + > + </File> + <File + RelativePath=".\search_engines\template_url_prepopulate_data.h" + > + </File> + </Filter> + <Filter + Name="Metrics" + > + <File + RelativePath=".\metrics\metrics_log.cc" + > + </File> + <File + RelativePath=".\metrics\metrics_log.h" + > + </File> + <File + RelativePath=".\metrics\metrics_response.cc" + > + </File> + <File + RelativePath=".\metrics\metrics_response.h" + > + </File> + <File + RelativePath=".\metrics\metrics_service.cc" + > + </File> + <File + RelativePath=".\metrics\metrics_service.h" + > + </File> + <File + RelativePath=".\metrics\user_metrics.cc" + > + </File> + <File + RelativePath=".\metrics\user_metrics.h" + > + </File> + </Filter> + <Filter + Name="SSL" + > + <File + RelativePath=".\ssl\ssl_blocking_page.cc" + > + </File> + <File + RelativePath=".\ssl\ssl_blocking_page.h" + > + </File> + <File + RelativePath=".\ssl\ssl_cert_error_handler.h" + > + </File> + <File + RelativePath=".\ssl\ssl_error_handler.cc" + > + </File> + <File + RelativePath=".\ssl\ssl_error_handler.h" + > + </File> + <File + RelativePath=".\ssl\ssl_error_info.cc" + > + </File> + <File + RelativePath=".\ssl\ssl_error_info.h" + > + </File> + <File + RelativePath=".\ssl\ssl_host_state.cc" + > + </File> + <File + RelativePath=".\ssl\ssl_host_state.h" + > + </File> + <File + RelativePath=".\ssl\ssl_manager.cc" + > + </File> + <File + RelativePath=".\ssl\ssl_manager.h" + > + </File> + <File + RelativePath=".\ssl\ssl_mixed_content_handler.h" + > + </File> + <File + RelativePath=".\ssl\ssl_policy.cc" + > + </File> + <File + RelativePath=".\ssl\ssl_policy.h" + > + </File> + <File + RelativePath=".\ssl\ssl_request_info.h" + > + </File> + </Filter> + <Filter + Name="Worker Host" + > + <File + RelativePath=".\worker_host\worker_process_host.cc" + > + </File> + <File + RelativePath=".\worker_host\worker_process_host.h" + > + </File> + <File + RelativePath=".\worker_host\worker_service.cc" + > + </File> + <File + RelativePath=".\worker_host\worker_service.h" + > + </File> + </Filter> + <File + RelativePath=".\browser_trial.cc" + > + </File> + <File + RelativePath=".\browser_trial.h" + > + </File> + <File + RelativePath=".\cert_store.cc" + > + </File> + <File + RelativePath=".\cert_store.h" + > + </File> + <File + RelativePath=".\chrome_plugin_browsing_context.cc" + > + </File> + <File + RelativePath=".\chrome_plugin_browsing_context.h" + > + </File> + <File + RelativePath=".\chrome_plugin_host.cc" + > + </File> + <File + RelativePath=".\encoding_menu_controller_delegate.cc" + > + </File> + <File + RelativePath=".\encoding_menu_controller_delegate.h" + > + </File> + <File + RelativePath=".\external_protocol_handler.cc" + > + </File> + <File + RelativePath=".\external_protocol_handler.h" + > + </File> + <File + RelativePath=".\gears_integration.cc" + > + </File> + <File + RelativePath=".\gears_integration.h" + > + </File> + <File + RelativePath=".\google_update.cc" + > + </File> + <File + RelativePath=".\google_update.h" + > + </File> + <File + RelativePath=".\hung_renderer_dialog.h" + > + </File> + <File + RelativePath=".\modal_html_dialog_delegate.cc" + > + </File> + <File + RelativePath=".\modal_html_dialog_delegate.h" + > + </File> + <File + RelativePath=".\page_state.cc" + > + </File> + <File + RelativePath=".\page_state.h" + > + </File> + <File + RelativePath=".\plugin_installer.cc" + > + </File> + <File + RelativePath=".\plugin_installer.h" + > + </File> + <File + RelativePath="$(OutDir)\grit_derived_sources\grit\theme_resources_map.cc" + > + </File> + <File + RelativePath=".\theme_resources_util.cc" + > + </File> + <File + RelativePath=".\theme_resources_util.h" + > + </File> + <File + RelativePath=".\toolbar_model.cc" + > + </File> + <File + RelativePath=".\toolbar_model.h" + > + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/chrome/browser/ssl/ssl_blocking_page.cc b/chrome/browser/ssl/ssl_blocking_page.cc index 24794c0..e7fe5bc 100644 --- a/chrome/browser/ssl/ssl_blocking_page.cc +++ b/chrome/browser/ssl/ssl_blocking_page.cc @@ -12,6 +12,7 @@ #include "chrome/browser/browser.h" #include "chrome/browser/cert_store.h" #include "chrome/browser/dom_operation_notification_details.h" +#include "chrome/browser/ssl/ssl_cert_error_handler.h" #include "chrome/browser/ssl/ssl_error_info.h" #include "chrome/browser/tab_contents/navigation_controller.h" #include "chrome/browser/tab_contents/navigation_entry.h" @@ -41,10 +42,10 @@ void RecordSSLBlockingPageStats(SSLBlockingPageEvent event) { // Note that we always create a navigation entry with SSL errors. // No error happening loading a sub-resource triggers an interstitial so far. -SSLBlockingPage::SSLBlockingPage(SSLManager::CertError* error, +SSLBlockingPage::SSLBlockingPage(SSLCertErrorHandler* handler, Delegate* delegate) - : InterstitialPage(error->GetTabContents(), true, error->request_url()), - error_(error), + : InterstitialPage(handler->GetTabContents(), true, handler->request_url()), + handler_(handler), delegate_(delegate), delegate_has_been_notified_(false) { RecordSSLBlockingPageStats(SHOW); @@ -61,7 +62,7 @@ SSLBlockingPage::~SSLBlockingPage() { std::string SSLBlockingPage::GetHTMLContents() { // Let's build the html error page. DictionaryValue strings; - SSLErrorInfo error_info = delegate_->GetSSLErrorInfo(error_); + SSLErrorInfo error_info = delegate_->GetSSLErrorInfo(handler_); strings.SetString(L"title", l10n_util::GetString(IDS_SSL_BLOCKING_PAGE_TITLE)); strings.SetString(L"headLine", error_info.title()); @@ -88,7 +89,7 @@ std::string SSLBlockingPage::GetHTMLContents() { } void SSLBlockingPage::UpdateEntry(NavigationEntry* entry) { - const net::SSLInfo& ssl_info = error_->ssl_info(); + const net::SSLInfo& ssl_info = handler_->ssl_info(); int cert_id = CertStore::GetSharedInstance()->StoreCert( ssl_info.cert, tab()->render_view_host()->process()->pid()); @@ -130,14 +131,14 @@ void SSLBlockingPage::DontProceed() { void SSLBlockingPage::NotifyDenyCertificate() { DCHECK(!delegate_has_been_notified_); - delegate_->OnDenyCertificate(error_); + delegate_->OnDenyCertificate(handler_); delegate_has_been_notified_ = true; } void SSLBlockingPage::NotifyAllowCertificate() { DCHECK(!delegate_has_been_notified_); - delegate_->OnAllowCertificate(error_); + delegate_->OnAllowCertificate(handler_); delegate_has_been_notified_ = true; } diff --git a/chrome/browser/ssl/ssl_blocking_page.h b/chrome/browser/ssl/ssl_blocking_page.h index e6c6971..b83e16a 100644 --- a/chrome/browser/ssl/ssl_blocking_page.h +++ b/chrome/browser/ssl/ssl_blocking_page.h @@ -7,10 +7,11 @@ #include <string> -#include "chrome/browser/ssl/ssl_manager.h" +#include "chrome/browser/ssl/ssl_error_info.h" #include "chrome/browser/tab_contents/interstitial_page.h" class DictionaryValue; +class SSLCertErrorHandler; // This class is responsible for showing/hiding the interstitial page that is // shown when a certificate error happens. @@ -23,16 +24,16 @@ class SSLBlockingPage : public InterstitialPage { public: // Should return the information about the error that causes this blocking // page. - virtual SSLErrorInfo GetSSLErrorInfo(SSLManager::CertError* error) = 0; + virtual SSLErrorInfo GetSSLErrorInfo(SSLCertErrorHandler* handler) = 0; // Notification that the user chose to reject the certificate. - virtual void OnDenyCertificate(SSLManager::CertError* error) = 0; + virtual void OnDenyCertificate(SSLCertErrorHandler* handler) = 0; // Notification that the user chose to accept the certificate. - virtual void OnAllowCertificate(SSLManager::CertError* error) = 0; + virtual void OnAllowCertificate(SSLCertErrorHandler* handler) = 0; }; - SSLBlockingPage(SSLManager::CertError* error, Delegate* delegate); + SSLBlockingPage(SSLCertErrorHandler* handler, Delegate* delegate); virtual ~SSLBlockingPage(); // A method that sets strings in the specified dictionary from the passed @@ -56,7 +57,7 @@ class SSLBlockingPage : public InterstitialPage { // The error we represent. We will either call CancelRequest() or // ContinueRequest() on this object. - scoped_refptr<SSLManager::CertError> error_; + scoped_refptr<SSLCertErrorHandler> handler_; // Our delegate. It provides useful information, like the title and details // about this error. diff --git a/chrome/browser/ssl/ssl_cert_error_handler.h b/chrome/browser/ssl/ssl_cert_error_handler.h new file mode 100644 index 0000000..632927b --- /dev/null +++ b/chrome/browser/ssl/ssl_cert_error_handler.h @@ -0,0 +1,58 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SSL_SSL_CERT_ERROR_HANDLER_H_ +#define CHROME_BROWSER_SSL_SSL_CERT_ERROR_HANDLER_H_ + +#include "chrome/browser/ssl/ssl_error_handler.h" +#include "chrome/browser/ssl/ssl_manager.h" +#include "net/base/ssl_info.h" +#include "net/base/x509_certificate.h" + +// A CertError represents an error that occurred with the certificate in an +// SSL session. A CertError object exists both on the IO thread and on the UI +// thread and allows us to cancel/continue a request it is associated with. +class SSLCertErrorHandler : public SSLErrorHandler { + public: + // Construct on the IO thread. + // We mark this method as private because it is tricky to correctly + // construct a CertError object. + SSLCertErrorHandler(ResourceDispatcherHost* rdh, + URLRequest* request, + ResourceType::Type resource_type, + const std::string& frame_origin, + const std::string& main_frame_origin, + int cert_error, + net::X509Certificate* cert, + MessageLoop* ui_loop) + : SSLErrorHandler(rdh, request, resource_type, frame_origin, + main_frame_origin, ui_loop), + cert_error_(cert_error) { + DCHECK(request == resource_dispatcher_host_->GetURLRequest(request_id_)); + + // We cannot use the request->ssl_info(), it's not been initialized yet, so + // we have to set the fields manually. + ssl_info_.cert = cert; + ssl_info_.SetCertError(cert_error); + } + + virtual SSLCertErrorHandler* AsSSLCertErrorHandler() { return this; } + + // These accessors are available on either thread + const net::SSLInfo& ssl_info() const { return ssl_info_; } + int cert_error() const { return cert_error_; } + + private: + // SSLErrorHandler methods + virtual void OnDispatchFailed() { CancelRequest(); } + virtual void OnDispatched() { manager_->OnCertError(this); } + + // These read-only members may be accessed on any thread. + net::SSLInfo ssl_info_; + const int cert_error_; // The error we represent. + + DISALLOW_COPY_AND_ASSIGN(SSLCertErrorHandler); +}; + +#endif // CHROME_BROWSER_SSL_SSL_CERT_ERROR_HANDLER_H_ diff --git a/chrome/browser/ssl/ssl_error_handler.cc b/chrome/browser/ssl/ssl_error_handler.cc new file mode 100644 index 0000000..b5b435b --- /dev/null +++ b/chrome/browser/ssl/ssl_error_handler.cc @@ -0,0 +1,209 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ssl/ssl_error_handler.h" + +#include "base/message_loop.h" +#include "chrome/browser/ssl/ssl_cert_error_handler.h" +#include "chrome/browser/tab_contents/tab_contents.h" +#include "chrome/browser/tab_contents/tab_util.h" +#include "net/base/net_errors.h" +#include "net/url_request/url_request.h" + +SSLErrorHandler::SSLErrorHandler(ResourceDispatcherHost* rdh, + URLRequest* request, + ResourceType::Type resource_type, + const std::string& frame_origin, + const std::string& main_frame_origin, + MessageLoop* ui_loop) + : ui_loop_(ui_loop), + io_loop_(MessageLoop::current()), + manager_(NULL), + request_id_(0, 0), + resource_dispatcher_host_(rdh), + request_url_(request->url()), + resource_type_(resource_type), + frame_origin_(frame_origin), + main_frame_origin_(main_frame_origin), + request_has_been_notified_(false) { + DCHECK(MessageLoop::current() != ui_loop); + + ResourceDispatcherHost::ExtraRequestInfo* info = + ResourceDispatcherHost::ExtraInfoForRequest(request); + request_id_.process_id = info->process_id; + request_id_.request_id = info->request_id; + + if (!tab_util::GetTabContentsID(request, + &render_process_host_id_, + &tab_contents_id_)) + NOTREACHED(); + + // This makes sure we don't disappear on the IO thread until we've given an + // answer to the URLRequest. + // + // Release in CompleteCancelRequest, CompleteContinueRequest, + // CompleteStartRequest or CompleteTakeNoAction. + AddRef(); +} + +void SSLErrorHandler::Dispatch() { + DCHECK(MessageLoop::current() == ui_loop_); + + TabContents* tab_contents = + tab_util::GetTabContentsByID(render_process_host_id_, tab_contents_id_); + + if (!tab_contents) { + // We arrived on the UI thread, but the tab we're looking for is no longer + // here. + OnDispatchFailed(); + return; + } + + // Hand ourselves off to the SSLManager. + manager_ = tab_contents->controller().ssl_manager(); + OnDispatched(); +} + +TabContents* SSLErrorHandler::GetTabContents() { + return tab_util::GetTabContentsByID(render_process_host_id_, + tab_contents_id_); +} + +void SSLErrorHandler::CancelRequest() { + DCHECK(MessageLoop::current() == ui_loop_); + + // We need to complete this task on the IO thread. + io_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &SSLErrorHandler::CompleteCancelRequest, + net::ERR_ABORTED)); +} + +void SSLErrorHandler::DenyRequest() { + DCHECK(MessageLoop::current() == ui_loop_); + + // We need to complete this task on the IO thread. + io_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &SSLErrorHandler::CompleteCancelRequest, + net::ERR_INSECURE_RESPONSE)); +} + +void SSLErrorHandler::ContinueRequest() { + DCHECK(MessageLoop::current() == ui_loop_); + + // We need to complete this task on the IO thread. + io_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &SSLErrorHandler::CompleteContinueRequest)); +} + +void SSLErrorHandler::StartRequest(FilterPolicy::Type filter_policy) { + DCHECK(MessageLoop::current() == ui_loop_); + + // We need to complete this task on the IO thread. + io_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &SSLErrorHandler::CompleteStartRequest, filter_policy)); +} + +void SSLErrorHandler::TakeNoAction() { + DCHECK(MessageLoop::current() == ui_loop_); + + // We need to complete this task on the IO thread. + io_loop_->PostTask(FROM_HERE, NewRunnableMethod( + this, &SSLErrorHandler::CompleteTakeNoAction)); +} + +void SSLErrorHandler::CompleteCancelRequest(int error) { + DCHECK(MessageLoop::current() == io_loop_); + + // It is important that we notify the URLRequest only once. If we try to + // notify the request twice, it may no longer exist and |this| might have + // already have been deleted. + DCHECK(!request_has_been_notified_); + + if (!request_has_been_notified_) { + URLRequest* request = resource_dispatcher_host_->GetURLRequest(request_id_); + if (request) { + // The request can be NULL if it was cancelled by the renderer (as the + // result of the user navigating to a new page from the location bar). + DLOG(INFO) << "CompleteCancelRequest() url: " << request->url().spec(); + SSLCertErrorHandler* cert_error = AsSSLCertErrorHandler(); + if (cert_error) + request->SimulateSSLError(error, cert_error->ssl_info()); + else + request->SimulateError(error); + } + request_has_been_notified_ = true; + + // We're done with this object on the IO thread. + Release(); + } +} + +void SSLErrorHandler::CompleteContinueRequest() { + DCHECK(MessageLoop::current() == io_loop_); + + // It is important that we notify the URLRequest only once. If we try to + // notify the request twice, it may no longer exist and |this| might have + // already have been deleted. + DCHECK(!request_has_been_notified_); + + if (!request_has_been_notified_) { + URLRequest* request = resource_dispatcher_host_->GetURLRequest(request_id_); + if (request) { + // The request can be NULL if it was cancelled by the renderer (as the + // result of the user navigating to a new page from the location bar). + DLOG(INFO) << "CompleteContinueRequest() url: " << request->url().spec(); + request->ContinueDespiteLastError(); + } + request_has_been_notified_ = true; + + // We're done with this object on the IO thread. + Release(); + } +} + +void SSLErrorHandler::CompleteStartRequest(FilterPolicy::Type filter_policy) { + DCHECK(MessageLoop::current() == io_loop_); + + // It is important that we notify the URLRequest only once. If we try to + // notify the request twice, it may no longer exist and |this| might have + // already have been deleted. + DCHECK(!request_has_been_notified_); + + if (request_has_been_notified_) + return; + + URLRequest* request = resource_dispatcher_host_->GetURLRequest(request_id_); + if (request) { + // The request can be NULL if it was cancelled by the renderer (as the + // result of the user navigating to a new page from the location bar). + DLOG(INFO) << "CompleteStartRequest() url: " << request->url().spec(); + // The request should not have been started (SUCCESS is the initial state). + DCHECK(request->status().status() == URLRequestStatus::SUCCESS); + ResourceDispatcherHost::ExtraRequestInfo* info = + ResourceDispatcherHost::ExtraInfoForRequest(request); + info->filter_policy = filter_policy; + request->Start(); + } + request_has_been_notified_ = true; + + // We're done with this object on the IO thread. + Release(); +} + +void SSLErrorHandler::CompleteTakeNoAction() { + DCHECK(MessageLoop::current() == io_loop_); + + // It is important that we notify the URLRequest only once. If we try to + // notify the request twice, it may no longer exist and |this| might have + // already have been deleted. + DCHECK(!request_has_been_notified_); + + if (!request_has_been_notified_) { + request_has_been_notified_ = true; + + // We're done with this object on the IO thread. + Release(); + } +} + diff --git a/chrome/browser/ssl/ssl_error_handler.h b/chrome/browser/ssl/ssl_error_handler.h new file mode 100644 index 0000000..9ef1b04 --- /dev/null +++ b/chrome/browser/ssl/ssl_error_handler.h @@ -0,0 +1,176 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SSL_SSL_ERROR_HANDLER_H_ +#define CHROME_BROWSER_SSL_SSL_ERROR_HANDLER_H_ + +#include <string> + +#include "base/basictypes.h" +#include "base/ref_counted.h" +#include "chrome/browser/renderer_host/resource_dispatcher_host.h" +#include "chrome/common/filter_policy.h" +#include "googleurl/src/gurl.h" +#include "webkit/glue/resource_type.h" + +class MessageLoop; +class SSLCertErrorHandler; +class SSLManager; +class TabContents; +class URLRequest; + +// An SSLErrorHandler carries information from the IO thread to the UI thread +// and is dispatched to the appropriate SSLManager when it arrives on the +// UI thread. Subclasses should override the OnDispatched/OnDispatchFailed +// methods to implement the actions that should be taken on the UI thread. +// These methods can call the different convenience methods ContinueRequest/ +// CancelRequest/StartRequest to perform any required action on the URLRequest +// the ErrorHandler was created with. +// +// IMPORTANT NOTE: +// +// If you are not doing anything in OnDispatched/OnDispatchFailed, make sure +// you call TakeNoAction(). This is necessary for ensuring the instance is +// not leaked. +// +class SSLErrorHandler : public base::RefCountedThreadSafe<SSLErrorHandler> { + public: + virtual ~SSLErrorHandler() { } + + virtual SSLCertErrorHandler* AsSSLCertErrorHandler() { return NULL; } + + // Find the appropriate SSLManager for the URLRequest and begin handling + // this error. + // + // Call on UI thread. + void Dispatch(); + + // Available on either thread. + const GURL& request_url() const { return request_url_; } + + // Available on either thread. + ResourceType::Type resource_type() const { return resource_type_; } + + // Available on either thread. + const std::string& frame_origin() const { return frame_origin_; } + + // Available on either thread. + const std::string& main_frame_origin() const { return main_frame_origin_; } + + // Call on the UI thread. + SSLManager* manager() const { return manager_; } + + // Returns the TabContents this object is associated with. Should be + // called from the UI thread. + TabContents* GetTabContents(); + + // Cancels the associated URLRequest. + // This method can be called from OnDispatchFailed and OnDispatched. + void CancelRequest(); + + // Continue the URLRequest ignoring any previous errors. Note that some + // errors cannot be ignored, in which case this will result in the request + // being canceled. + // This method can be called from OnDispatchFailed and OnDispatched. + void ContinueRequest(); + + // Cancels the associated URLRequest and mark it as denied. The renderer + // processes such request in a special manner, optionally replacing them + // with alternate content (typically frames content is replaced with a + // warning message). + // This method can be called from OnDispatchFailed and OnDispatched. + void DenyRequest(); + + // Starts the associated URLRequest. |filter_policy| specifies whether the + // ResourceDispatcher should attempt to filter the loaded content in order + // to make it secure (ex: images are made slightly transparent and are + // stamped). + // Should only be called when the URLRequest has not already been started. + // This method can be called from OnDispatchFailed and OnDispatched. + void StartRequest(FilterPolicy::Type filter_policy); + + // Does nothing on the URLRequest but ensures the current instance ref + // count is decremented appropriately. Subclasses that do not want to + // take any specific actions in their OnDispatched/OnDispatchFailed should + // call this. + void TakeNoAction(); + + protected: + // Construct on the IO thread. + SSLErrorHandler(ResourceDispatcherHost* resource_dispatcher_host, + URLRequest* request, + ResourceType::Type resource_type, + const std::string& frame_origin, + const std::string& main_frame_origin, + MessageLoop* ui_loop); + + // The following 2 methods are the methods subclasses should implement. + virtual void OnDispatchFailed() { TakeNoAction(); } + + // Can use the manager_ member. + virtual void OnDispatched() { TakeNoAction(); } + + // We cache the message loops to be able to proxy events across the thread + // boundaries. + MessageLoop* ui_loop_; + MessageLoop* io_loop_; + + // Should only be accessed on the UI thread. + SSLManager* manager_; // Our manager. + + // The id of the URLRequest associated with this object. + // Should only be accessed from the IO thread. + ResourceDispatcherHost::GlobalRequestID request_id_; + + // The ResourceDispatcherHost we are associated with. + ResourceDispatcherHost* resource_dispatcher_host_; + + private: + // Completes the CancelRequest operation on the IO thread. + // Call on the IO thread. + void CompleteCancelRequest(int error); + + // Completes the ContinueRequest operation on the IO thread. + // + // Call on the IO thread. + void CompleteContinueRequest(); + + // Completes the StartRequest operation on the IO thread. + // Call on the IO thread. + void CompleteStartRequest(FilterPolicy::Type filter_policy); + + // Derefs this instance. + // Call on the IO thread. + void CompleteTakeNoAction(); + + // We use these members to find the correct SSLManager when we arrive on + // the UI thread. + int render_process_host_id_; + int tab_contents_id_; + + // The URL that we requested. + // This read-only member can be accessed on any thread. + const GURL request_url_; + + // What kind of resource is associated with the requested that generated + // that error. + // This read-only member can be accessed on any thread. + const ResourceType::Type resource_type_; + + // The origin of the frame associated with this request. + // This read-only member can be accessed on any thread. + const std::string frame_origin_; + + // The origin of the main frame associated with this request. + // This read-only member can be accessed on any thread. + const std::string main_frame_origin_; + + // A flag to make sure we notify the URLRequest exactly once. + // Should only be accessed on the IO thread + bool request_has_been_notified_; + + DISALLOW_COPY_AND_ASSIGN(SSLErrorHandler); +}; + +#endif // CHROME_BROWSER_SSL_SSL_ERROR_HANDLER_H_ diff --git a/chrome/browser/ssl/ssl_manager.cc b/chrome/browser/ssl/ssl_manager.cc index 0510810..c46a20b 100644 --- a/chrome/browser/ssl/ssl_manager.cc +++ b/chrome/browser/ssl/ssl_manager.cc @@ -12,9 +12,13 @@ #include "chrome/browser/load_from_memory_cache_details.h" #include "chrome/browser/renderer_host/render_view_host.h" #include "chrome/browser/renderer_host/resource_request_details.h" +#include "chrome/browser/ssl/ssl_cert_error_handler.h" #include "chrome/browser/ssl/ssl_error_info.h" +#include "chrome/browser/ssl/ssl_error_handler.h" #include "chrome/browser/ssl/ssl_host_state.h" +#include "chrome/browser/ssl/ssl_mixed_content_handler.h" #include "chrome/browser/ssl/ssl_policy.h" +#include "chrome/browser/ssl/ssl_request_info.h" #include "chrome/browser/tab_contents/infobar_delegate.h" #include "chrome/browser/tab_contents/navigation_controller.h" #include "chrome/browser/tab_contents/navigation_entry.h" @@ -90,9 +94,6 @@ class SSLInfoBarDelegate : public ConfirmInfoBarDelegate { DISALLOW_COPY_AND_ASSIGN(SSLInfoBarDelegate); }; -//////////////////////////////////////////////////////////////////////////////// -// SSLManager - // static void SSLManager::RegisterUserPrefs(PrefService* prefs) { prefs->RegisterIntegerPref(prefs::kMixedContentFiltering, @@ -231,230 +232,6 @@ bool SSLManager::ProcessedSSLErrorFromRequest() const { return net::IsCertStatusError(entry->ssl().cert_status()); } -//////////////////////////////////////////////////////////////////////////////// -// ErrorHandler - -SSLManager::ErrorHandler::ErrorHandler(ResourceDispatcherHost* rdh, - URLRequest* request, - ResourceType::Type resource_type, - const std::string& frame_origin, - const std::string& main_frame_origin, - MessageLoop* ui_loop) - : ui_loop_(ui_loop), - io_loop_(MessageLoop::current()), - manager_(NULL), - request_id_(0, 0), - resource_dispatcher_host_(rdh), - request_url_(request->url()), - resource_type_(resource_type), - frame_origin_(frame_origin), - main_frame_origin_(main_frame_origin), - request_has_been_notified_(false) { - DCHECK(MessageLoop::current() != ui_loop); - - ResourceDispatcherHost::ExtraRequestInfo* info = - ResourceDispatcherHost::ExtraInfoForRequest(request); - request_id_.process_id = info->process_id; - request_id_.request_id = info->request_id; - - if (!tab_util::GetTabContentsID(request, - &render_process_host_id_, - &tab_contents_id_)) - NOTREACHED(); - - // This makes sure we don't disappear on the IO thread until we've given an - // answer to the URLRequest. - // - // Release in CompleteCancelRequest, CompleteContinueRequest, - // CompleteStartRequest or CompleteTakeNoAction. - AddRef(); -} - -void SSLManager::ErrorHandler::Dispatch() { - DCHECK(MessageLoop::current() == ui_loop_); - - TabContents* tab_contents = - tab_util::GetTabContentsByID(render_process_host_id_, tab_contents_id_); - - if (!tab_contents) { - // We arrived on the UI thread, but the tab we're looking for is no longer - // here. - OnDispatchFailed(); - return; - } - - // Hand ourselves off to the SSLManager. - manager_ = tab_contents->controller().ssl_manager(); - OnDispatched(); -} - -TabContents* SSLManager::ErrorHandler::GetTabContents() { - return tab_util::GetTabContentsByID(render_process_host_id_, - tab_contents_id_); -} - -void SSLManager::ErrorHandler::CancelRequest() { - DCHECK(MessageLoop::current() == ui_loop_); - - // We need to complete this task on the IO thread. - io_loop_->PostTask(FROM_HERE, NewRunnableMethod( - this, &SSLManager::ErrorHandler::CompleteCancelRequest, - net::ERR_ABORTED)); -} - -void SSLManager::ErrorHandler::DenyRequest() { - DCHECK(MessageLoop::current() == ui_loop_); - - // We need to complete this task on the IO thread. - io_loop_->PostTask(FROM_HERE, NewRunnableMethod( - this, &SSLManager::ErrorHandler::CompleteCancelRequest, - net::ERR_INSECURE_RESPONSE)); -} - -void SSLManager::ErrorHandler::ContinueRequest() { - DCHECK(MessageLoop::current() == ui_loop_); - - // We need to complete this task on the IO thread. - io_loop_->PostTask(FROM_HERE, NewRunnableMethod( - this, &SSLManager::ErrorHandler::CompleteContinueRequest)); -} - -void SSLManager::ErrorHandler::StartRequest(FilterPolicy::Type filter_policy) { - DCHECK(MessageLoop::current() == ui_loop_); - - // We need to complete this task on the IO thread. - io_loop_->PostTask(FROM_HERE, NewRunnableMethod( - this, &SSLManager::ErrorHandler::CompleteStartRequest, filter_policy)); -} - -void SSLManager::ErrorHandler::TakeNoAction() { - DCHECK(MessageLoop::current() == ui_loop_); - - // We need to complete this task on the IO thread. - io_loop_->PostTask(FROM_HERE, NewRunnableMethod( - this, &SSLManager::ErrorHandler::CompleteTakeNoAction)); -} - -void SSLManager::ErrorHandler::CompleteCancelRequest(int error) { - DCHECK(MessageLoop::current() == io_loop_); - - // It is important that we notify the URLRequest only once. If we try to - // notify the request twice, it may no longer exist and |this| might have - // already have been deleted. - DCHECK(!request_has_been_notified_); - - if (!request_has_been_notified_) { - URLRequest* request = resource_dispatcher_host_->GetURLRequest(request_id_); - if (request) { - // The request can be NULL if it was cancelled by the renderer (as the - // result of the user navigating to a new page from the location bar). - DLOG(INFO) << "CompleteCancelRequest() url: " << request->url().spec(); - SSLManager::CertError* cert_error = AsCertError(); - if (cert_error) - request->SimulateSSLError(error, cert_error->ssl_info()); - else - request->SimulateError(error); - } - request_has_been_notified_ = true; - - // We're done with this object on the IO thread. - Release(); - } -} - -void SSLManager::ErrorHandler::CompleteContinueRequest() { - DCHECK(MessageLoop::current() == io_loop_); - - // It is important that we notify the URLRequest only once. If we try to - // notify the request twice, it may no longer exist and |this| might have - // already have been deleted. - DCHECK(!request_has_been_notified_); - - if (!request_has_been_notified_) { - URLRequest* request = resource_dispatcher_host_->GetURLRequest(request_id_); - if (request) { - // The request can be NULL if it was cancelled by the renderer (as the - // result of the user navigating to a new page from the location bar). - DLOG(INFO) << "CompleteContinueRequest() url: " << request->url().spec(); - request->ContinueDespiteLastError(); - } - request_has_been_notified_ = true; - - // We're done with this object on the IO thread. - Release(); - } -} - -void SSLManager::ErrorHandler::CompleteStartRequest( - FilterPolicy::Type filter_policy) { - DCHECK(MessageLoop::current() == io_loop_); - - // It is important that we notify the URLRequest only once. If we try to - // notify the request twice, it may no longer exist and |this| might have - // already have been deleted. - DCHECK(!request_has_been_notified_); - - if (request_has_been_notified_) - return; - - URLRequest* request = resource_dispatcher_host_->GetURLRequest(request_id_); - if (request) { - // The request can be NULL if it was cancelled by the renderer (as the - // result of the user navigating to a new page from the location bar). - DLOG(INFO) << "CompleteStartRequest() url: " << request->url().spec(); - // The request should not have been started (SUCCESS is the initial state). - DCHECK(request->status().status() == URLRequestStatus::SUCCESS); - ResourceDispatcherHost::ExtraRequestInfo* info = - ResourceDispatcherHost::ExtraInfoForRequest(request); - info->filter_policy = filter_policy; - request->Start(); - } - request_has_been_notified_ = true; - - // We're done with this object on the IO thread. - Release(); -} - -void SSLManager::ErrorHandler::CompleteTakeNoAction() { - DCHECK(MessageLoop::current() == io_loop_); - - // It is important that we notify the URLRequest only once. If we try to - // notify the request twice, it may no longer exist and |this| might have - // already have been deleted. - DCHECK(!request_has_been_notified_); - - if (!request_has_been_notified_) { - request_has_been_notified_ = true; - - // We're done with this object on the IO thread. - Release(); - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// CertError - -SSLManager::CertError::CertError( - ResourceDispatcherHost* rdh, - URLRequest* request, - ResourceType::Type resource_type, - const std::string& frame_origin, - const std::string& main_frame_origin, - int cert_error, - net::X509Certificate* cert, - MessageLoop* ui_loop) - : ErrorHandler(rdh, request, resource_type, frame_origin, - main_frame_origin, ui_loop), - cert_error_(cert_error) { - DCHECK(request == resource_dispatcher_host_->GetURLRequest(request_id_)); - - // We cannot use the request->ssl_info(), it's not been initialized yet, so - // we have to set the fields manually. - ssl_info_.cert = cert; - ssl_info_.SetCertError(cert_error); -} - // static void SSLManager::OnSSLCertificateError(ResourceDispatcherHost* rdh, URLRequest* request, @@ -468,18 +245,18 @@ void SSLManager::OnSSLCertificateError(ResourceDispatcherHost* rdh, ResourceDispatcherHost::ExtraInfoForRequest(request); DCHECK(info); - // A certificate error occurred. Construct a CertError object and hand it - // over to the UI thread for processing. + // A certificate error occurred. Construct a SSLCertErrorHandler object and + // hand it over to the UI thread for processing. ui_loop->PostTask(FROM_HERE, - NewRunnableMethod(new CertError(rdh, - request, - info->resource_type, - info->frame_origin, - info->main_frame_origin, - cert_error, - cert, - ui_loop), - &CertError::Dispatch)); + NewRunnableMethod(new SSLCertErrorHandler(rdh, + request, + info->resource_type, + info->frame_origin, + info->main_frame_origin, + cert_error, + cert, + ui_loop), + &SSLCertErrorHandler::Dispatch)); } // static @@ -500,21 +277,22 @@ bool SSLManager::ShouldStartRequest(ResourceDispatcherHost* rdh, ui_loop->PostTask(FROM_HERE, - NewRunnableMethod(new MixedContentHandler(rdh, request, - info->resource_type, - info->frame_origin, - info->main_frame_origin, - info->process_id, - ui_loop), - &MixedContentHandler::Dispatch)); + NewRunnableMethod(new SSLMixedContentHandler(rdh, + request, + info->resource_type, + info->frame_origin, + info->main_frame_origin, + info->process_id, + ui_loop), + &SSLMixedContentHandler::Dispatch)); return false; } -void SSLManager::OnCertError(CertError* error) { - delegate()->OnCertError(error); +void SSLManager::OnCertError(SSLCertErrorHandler* handler) { + delegate()->OnCertError(handler); } -void SSLManager::OnMixedContent(MixedContentHandler* handler) { +void SSLManager::OnMixedContent(SSLMixedContentHandler* handler) { delegate()->OnMixedContent(handler); } @@ -582,7 +360,7 @@ void SSLManager::DidLoadFromMemoryCache(LoadFromMemoryCacheDetails* details) { // caches sub-resources. // This resource must have been loaded with FilterPolicy::DONT_FILTER because // filtered resouces aren't cachable. - scoped_refptr<RequestInfo> info = new RequestInfo( + scoped_refptr<SSLRequestInfo> info = new SSLRequestInfo( this, details->url(), ResourceType::SUB_RESOURCE, @@ -646,7 +424,7 @@ void SSLManager::DidFailProvisionalLoadWithError( void SSLManager::DidStartResourceResponse(ResourceRequestDetails* details) { DCHECK(details); - scoped_refptr<RequestInfo> info = new RequestInfo( + scoped_refptr<SSLRequestInfo> info = new SSLRequestInfo( this, details->url(), details->resource_type(), diff --git a/chrome/browser/ssl/ssl_manager.h b/chrome/browser/ssl/ssl_manager.h index 5e6e77d..da77c05 100644 --- a/chrome/browser/ssl/ssl_manager.h +++ b/chrome/browser/ssl/ssl_manager.h @@ -32,8 +32,12 @@ class NavigationController; class PrefService; class ResourceRedirectDetails; class ResourceRequestDetails; +class SSLCertErrorHandler; +class SSLErrorHandler; class SSLErrorInfo; class SSLHostState; +class SSLMixedContentHandler; +class SSLRequestInfo; class Task; class URLRequest; class TabContents; @@ -48,273 +52,6 @@ class TabContents; class SSLManager : public NotificationObserver { public: - class CertError; - - // An ErrorHandler carries information from the IO thread to the UI thread - // and is dispatched to the appropriate SSLManager when it arrives on the - // UI thread. Subclasses should override the OnDispatched/OnDispatchFailed - // methods to implement the actions that should be taken on the UI thread. - // These methods can call the different convenience methods ContinueRequest/ - // CancelRequest/StartRequest to perform any required action on the URLRequest - // the ErrorHandler was created with. - // IMPORTANT NOTE: if you are not doing anything in - // OnDispatched/OnDispatchFailed, make sure you call TakeNoAction(). This is - // necessary for ensuring the instance is not leaked. - class ErrorHandler : public base::RefCountedThreadSafe<ErrorHandler> { - public: - virtual ~ErrorHandler() { } - - virtual CertError* AsCertError() { return NULL; } - - // Find the appropriate SSLManager for the URLRequest and begin handling - // this error. - // - // Call on UI thread. - void Dispatch(); - - // Available on either thread. - const GURL& request_url() const { return request_url_; } - - // Available on either thread. - ResourceType::Type resource_type() const { return resource_type_; } - - // Available on either thread. - const std::string& frame_origin() const { return frame_origin_; } - - // Available on either thread. - const std::string& main_frame_origin() const { return main_frame_origin_; } - - // Call on the UI thread. - SSLManager* manager() const { return manager_; } - - // Returns the TabContents this object is associated with. Should be - // called from the UI thread. - TabContents* GetTabContents(); - - // Cancels the associated URLRequest. - // This method can be called from OnDispatchFailed and OnDispatched. - void CancelRequest(); - - // Continue the URLRequest ignoring any previous errors. Note that some - // errors cannot be ignored, in which case this will result in the request - // being canceled. - // This method can be called from OnDispatchFailed and OnDispatched. - void ContinueRequest(); - - // Cancels the associated URLRequest and mark it as denied. The renderer - // processes such request in a special manner, optionally replacing them - // with alternate content (typically frames content is replaced with a - // warning message). - // This method can be called from OnDispatchFailed and OnDispatched. - void DenyRequest(); - - // Starts the associated URLRequest. |filter_policy| specifies whether the - // ResourceDispatcher should attempt to filter the loaded content in order - // to make it secure (ex: images are made slightly transparent and are - // stamped). - // Should only be called when the URLRequest has not already been started. - // This method can be called from OnDispatchFailed and OnDispatched. - void StartRequest(FilterPolicy::Type filter_policy); - - // Does nothing on the URLRequest but ensures the current instance ref - // count is decremented appropriately. Subclasses that do not want to - // take any specific actions in their OnDispatched/OnDispatchFailed should - // call this. - void TakeNoAction(); - - protected: - // Construct on the IO thread. - ErrorHandler(ResourceDispatcherHost* resource_dispatcher_host, - URLRequest* request, - ResourceType::Type resource_type, - const std::string& frame_origin, - const std::string& main_frame_origin, - MessageLoop* ui_loop); - - // The following 2 methods are the methods subclasses should implement. - virtual void OnDispatchFailed() { TakeNoAction(); } - - // Can use the manager_ member. - virtual void OnDispatched() { TakeNoAction(); } - - // We cache the message loops to be able to proxy events across the thread - // boundaries. - MessageLoop* ui_loop_; - MessageLoop* io_loop_; - - // Should only be accessed on the UI thread. - SSLManager* manager_; // Our manager. - - // The id of the URLRequest associated with this object. - // Should only be accessed from the IO thread. - ResourceDispatcherHost::GlobalRequestID request_id_; - - // The ResourceDispatcherHost we are associated with. - ResourceDispatcherHost* resource_dispatcher_host_; - - private: - // Completes the CancelRequest operation on the IO thread. - // Call on the IO thread. - void CompleteCancelRequest(int error); - - // Completes the ContinueRequest operation on the IO thread. - // - // Call on the IO thread. - void CompleteContinueRequest(); - - // Completes the StartRequest operation on the IO thread. - // Call on the IO thread. - void CompleteStartRequest(FilterPolicy::Type filter_policy); - - // Derefs this instance. - // Call on the IO thread. - void CompleteTakeNoAction(); - - // We use these members to find the correct SSLManager when we arrive on - // the UI thread. - int render_process_host_id_; - int tab_contents_id_; - - // The URL that we requested. - // This read-only member can be accessed on any thread. - const GURL request_url_; - - // What kind of resource is associated with the requested that generated - // that error. - // This read-only member can be accessed on any thread. - const ResourceType::Type resource_type_; - - // The origin of the frame associated with this request. - // This read-only member can be accessed on any thread. - const std::string frame_origin_; - - // The origin of the main frame associated with this request. - // This read-only member can be accessed on any thread. - const std::string main_frame_origin_; - - // A flag to make sure we notify the URLRequest exactly once. - // Should only be accessed on the IO thread - bool request_has_been_notified_; - - DISALLOW_COPY_AND_ASSIGN(ErrorHandler); - }; - - // A CertError represents an error that occurred with the certificate in an - // SSL session. A CertError object exists both on the IO thread and on the UI - // thread and allows us to cancel/continue a request it is associated with. - class CertError : public ErrorHandler { - public: - - virtual CertError* AsCertError() { return this; } - - // These accessors are available on either thread - const net::SSLInfo& ssl_info() const { return ssl_info_; } - int cert_error() const { return cert_error_; } - - private: - // SSLManager is responsible for creating CertError objects. - friend class SSLManager; - - // Construct on the IO thread. - // We mark this method as private because it is tricky to correctly - // construct a CertError object. - CertError(ResourceDispatcherHost* resource_dispatcher_host, - URLRequest* request, - ResourceType::Type resource_type, - const std::string& frame_origin, - const std::string& main_frame_origin, - int cert_error, - net::X509Certificate* cert, - MessageLoop* ui_loop); - - // ErrorHandler methods - virtual void OnDispatchFailed() { CancelRequest(); } - virtual void OnDispatched() { manager_->OnCertError(this); } - - // These read-only members can be accessed on any thread. - net::SSLInfo ssl_info_; - const int cert_error_; // The error we represent. - - DISALLOW_COPY_AND_ASSIGN(CertError); - }; - - // The MixedContentHandler class is used to query what to do with - // mixed content, from the IO thread to the UI thread. - class MixedContentHandler : public ErrorHandler { - public: - // Created on the IO thread. - MixedContentHandler(ResourceDispatcherHost* rdh, - URLRequest* request, - ResourceType::Type resource_type, - const std::string& frame_origin, - const std::string& main_frame_origin, - int pid, - MessageLoop* ui_loop) - : ErrorHandler(rdh, request, resource_type, frame_origin, - main_frame_origin, ui_loop), - pid_(pid) {} - - int pid() const { return pid_; } - - protected: - virtual void OnDispatchFailed() { TakeNoAction(); } - virtual void OnDispatched() { manager()->OnMixedContent(this); } - - private: - int pid_; - - DISALLOW_COPY_AND_ASSIGN(MixedContentHandler); - }; - - // RequestInfo wraps up the information SSLPolicy needs about a request in - // order to update our security IU. RequestInfo is RefCounted in case we need - // to deal with the request asynchronously. - class RequestInfo : public base::RefCounted<RequestInfo> { - public: - RequestInfo(SSLManager* manager, - const GURL& url, - ResourceType::Type resource_type, - const std::string& frame_origin, - const std::string& main_frame_origin, - FilterPolicy::Type filter_policy, - int pid, - int ssl_cert_id, - int ssl_cert_status) - : manager_(manager), - url_(url), - resource_type_(resource_type), - frame_origin_(frame_origin), - main_frame_origin_(main_frame_origin), - filter_policy_(filter_policy), - pid_(pid), - ssl_cert_id_(ssl_cert_id), - ssl_cert_status_(ssl_cert_status) { - } - - SSLManager* manager() const { return manager_; } - const GURL& url() const { return url_; } - ResourceType::Type resource_type() const { return resource_type_; } - const std::string& frame_origin() const { return frame_origin_; } - const std::string& main_frame_origin() const { return main_frame_origin_; } - FilterPolicy::Type filter_policy() const { return filter_policy_; } - int pid() const { return pid_; } - int ssl_cert_id() const { return ssl_cert_id_; } - int ssl_cert_status() const { return ssl_cert_status_; } - - private: - SSLManager* manager_; - GURL url_; - ResourceType::Type resource_type_; - std::string frame_origin_; - std::string main_frame_origin_; - FilterPolicy::Type filter_policy_; - int pid_; - int ssl_cert_id_; - int ssl_cert_status_; - - DISALLOW_COPY_AND_ASSIGN(RequestInfo); - }; - // The SSLManager will ask its delegate to decide how to handle events // relevant to SSL. Delegates are expected to be stateless and intended to be // easily implementable. @@ -327,15 +64,15 @@ class SSLManager : public NotificationObserver { class Delegate { public: // An error occurred with the certificate in an SSL connection. - virtual void OnCertError(CertError* error) = 0; + virtual void OnCertError(SSLCertErrorHandler* handler) = 0; // A request for a mixed-content resource was made. Note that the resource // request was not started yet and the delegate is responsible for starting // it. - virtual void OnMixedContent(MixedContentHandler* handler) = 0; + virtual void OnMixedContent(SSLMixedContentHandler* handler) = 0; // We have started a resource request with the given info. - virtual void OnRequestStarted(RequestInfo* info) = 0; + virtual void OnRequestStarted(SSLRequestInfo* info) = 0; // Update the SSL information in |entry| to match the current state. virtual void UpdateEntry(SSLManager* manager, NavigationEntry* entry) = 0; @@ -438,14 +175,14 @@ class SSLManager : public NotificationObserver { // the SSL manager. The error originated from the ResourceDispatcherHost. // // Called on the UI thread. - void OnCertError(CertError* error); + void OnCertError(SSLCertErrorHandler* handler); // Called by MixedContentHandler::Dispatch to kick off processing of the // mixed-content resource request. The info originated from the // ResourceDispatcherHost. // // Called on the UI thread. - void OnMixedContent(MixedContentHandler* handler); + void OnMixedContent(SSLMixedContentHandler* handler); // Entry point for navigation. This function begins the process of updating // the security UI when the main frame navigates to a new URL. diff --git a/chrome/browser/ssl/ssl_mixed_content_handler.h b/chrome/browser/ssl/ssl_mixed_content_handler.h new file mode 100644 index 0000000..afb7e13 --- /dev/null +++ b/chrome/browser/ssl/ssl_mixed_content_handler.h @@ -0,0 +1,38 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SSL_SSL_MIXED_CONTENT_HANDLER_H_ +#define CHROME_BROWSER_SSL_SSL_MIXED_CONTENT_HANDLER_H_ + +#include "chrome/browser/ssl/ssl_error_handler.h" + +// The SSLMixedContentHandler class is used to query what to do with +// mixed content, from the IO thread to the UI thread. +class SSLMixedContentHandler : public SSLErrorHandler { + public: + // Created on the IO thread. + SSLMixedContentHandler(ResourceDispatcherHost* rdh, + URLRequest* request, + ResourceType::Type resource_type, + const std::string& frame_origin, + const std::string& main_frame_origin, + int pid, + MessageLoop* ui_loop) + : SSLErrorHandler(rdh, request, resource_type, frame_origin, + main_frame_origin, ui_loop), + pid_(pid) {} + + int pid() const { return pid_; } + + protected: + virtual void OnDispatchFailed() { TakeNoAction(); } + virtual void OnDispatched() { manager()->OnMixedContent(this); } + + private: + int pid_; + + DISALLOW_COPY_AND_ASSIGN(SSLMixedContentHandler); +}; + +#endif // CHROME_BROWSER_SSL_SSL_MIXED_CONTENT_HANDLERR_H_ diff --git a/chrome/browser/ssl/ssl_policy.cc b/chrome/browser/ssl/ssl_policy.cc index 6785eec..9c37117 100644 --- a/chrome/browser/ssl/ssl_policy.cc +++ b/chrome/browser/ssl/ssl_policy.cc @@ -11,7 +11,10 @@ #include "base/string_util.h" #include "chrome/browser/cert_store.h" #include "chrome/browser/renderer_host/render_view_host.h" +#include "chrome/browser/ssl/ssl_cert_error_handler.h" #include "chrome/browser/ssl/ssl_error_info.h" +#include "chrome/browser/ssl/ssl_mixed_content_handler.h" +#include "chrome/browser/ssl/ssl_request_info.h" #include "chrome/browser/tab_contents/navigation_entry.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/common/jstemplate_builder.h" @@ -52,7 +55,7 @@ static void AllowMixedContentForOrigin(SSLManager* manager, manager->AllowMixedContentForHost(parsed_origin.host()); } -static void UpdateStateForMixedContent(SSLManager::RequestInfo* info) { +static void UpdateStateForMixedContent(SSLRequestInfo* info) { if (info->resource_type() != ResourceType::MAIN_FRAME || info->resource_type() != ResourceType::SUB_FRAME) { // The frame's origin now contains mixed content and therefore is broken. @@ -66,7 +69,7 @@ static void UpdateStateForMixedContent(SSLManager::RequestInfo* info) { } } -static void UpdateStateForUnsafeContent(SSLManager::RequestInfo* info) { +static void UpdateStateForUnsafeContent(SSLRequestInfo* info) { // This request as a broken cert, which means its host is broken. info->manager()->MarkHostAsBroken(info->url().host(), info->pid()); @@ -75,19 +78,18 @@ static void UpdateStateForUnsafeContent(SSLManager::RequestInfo* info) { class ShowMixedContentTask : public Task { public: - ShowMixedContentTask(SSLManager::MixedContentHandler* handler); + ShowMixedContentTask(SSLMixedContentHandler* handler); virtual ~ShowMixedContentTask(); virtual void Run(); private: - scoped_refptr<SSLManager::MixedContentHandler> handler_; + scoped_refptr<SSLMixedContentHandler> handler_; DISALLOW_COPY_AND_ASSIGN(ShowMixedContentTask); }; -ShowMixedContentTask::ShowMixedContentTask( - SSLManager::MixedContentHandler* handler) +ShowMixedContentTask::ShowMixedContentTask(SSLMixedContentHandler* handler) : handler_(handler) { } @@ -101,8 +103,8 @@ void ShowMixedContentTask::Run() { handler_->manager()->controller()->Reload(true); } -static void ShowErrorPage(SSLPolicy* policy, SSLManager::CertError* error) { - SSLErrorInfo error_info = policy->GetSSLErrorInfo(error); +static void ShowErrorPage(SSLPolicy* policy, SSLCertErrorHandler* handler) { + SSLErrorInfo error_info = policy->GetSSLErrorInfo(handler); // Let's build the html error page. DictionaryValue strings; @@ -126,23 +128,23 @@ static void ShowErrorPage(SSLPolicy* policy, SSLManager::CertError* error) { std::string html_text(jstemplate_builder::GetTemplateHtml(html, &strings, "template_root")); - TabContents* tab = error->GetTabContents(); + TabContents* tab = handler->GetTabContents(); int cert_id = CertStore::GetSharedInstance()->StoreCert( - error->ssl_info().cert, tab->render_view_host()->process()->pid()); + handler->ssl_info().cert, tab->render_view_host()->process()->pid()); std::string security_info = SSLManager::SerializeSecurityInfo(cert_id, - error->ssl_info().cert_status, - error->ssl_info().security_bits); + handler->ssl_info().cert_status, + handler->ssl_info().security_bits); tab->render_view_host()->LoadAlternateHTMLString(html_text, true, - error->request_url(), + handler->request_url(), security_info); tab->controller().GetActiveEntry()->set_page_type( NavigationEntry::ERROR_PAGE); } -static void ShowBlockingPage(SSLPolicy* policy, SSLManager::CertError* error) { - SSLBlockingPage* blocking_page = new SSLBlockingPage(error, policy); +static void ShowBlockingPage(SSLPolicy* policy, SSLCertErrorHandler* handler) { + SSLBlockingPage* blocking_page = new SSLBlockingPage(handler, policy); blocking_page->Show(); } @@ -154,8 +156,7 @@ static void InitializeEntryIfNeeded(NavigationEntry* entry) { SECURITY_STYLE_AUTHENTICATED : SECURITY_STYLE_UNAUTHENTICATED); } -static void AddMixedContentWarningToConsole( - SSLManager::MixedContentHandler* handler) { +static void AddMixedContentWarningToConsole(SSLMixedContentHandler* handler) { const std::wstring& text = l10n_util::GetStringF( IDS_MIXED_CONTENT_LOG_MESSAGE, UTF8ToWide(handler->frame_origin()), @@ -173,14 +174,14 @@ SSLPolicy* SSLPolicy::GetDefaultPolicy() { return Singleton<SSLPolicy>::get(); } -void SSLPolicy::OnCertError(SSLManager::CertError* error) { +void SSLPolicy::OnCertError(SSLCertErrorHandler* handler) { // First we check if we know the policy for this error. net::X509Certificate::Policy::Judgment judgment = - error->manager()->QueryPolicy(error->ssl_info().cert, - error->request_url().host()); + handler->manager()->QueryPolicy(handler->ssl_info().cert, + handler->request_url().host()); if (judgment == net::X509Certificate::Policy::ALLOWED) { - error->ContinueRequest(); + handler->ContinueRequest(); return; } @@ -188,35 +189,35 @@ void SSLPolicy::OnCertError(SSLManager::CertError* error) { // For now we handle the DENIED as the UNKNOWN, which means a blocking // page is shown to the user every time he comes back to the page. - switch(error->cert_error()) { + switch(handler->cert_error()) { case net::ERR_CERT_COMMON_NAME_INVALID: case net::ERR_CERT_DATE_INVALID: case net::ERR_CERT_AUTHORITY_INVALID: - OnOverridableCertError(error); + OnOverridableCertError(handler); break; case net::ERR_CERT_NO_REVOCATION_MECHANISM: // Ignore this error. - error->ContinueRequest(); + handler->ContinueRequest(); break; case net::ERR_CERT_UNABLE_TO_CHECK_REVOCATION: // We ignore this error and display an infobar. - error->ContinueRequest(); - error->manager()->ShowMessage(l10n_util::GetString( + handler->ContinueRequest(); + handler->manager()->ShowMessage(l10n_util::GetString( IDS_CERT_ERROR_UNABLE_TO_CHECK_REVOCATION_INFO_BAR)); break; case net::ERR_CERT_CONTAINS_ERRORS: case net::ERR_CERT_REVOKED: case net::ERR_CERT_INVALID: - OnFatalCertError(error); + OnFatalCertError(handler); break; default: NOTREACHED(); - error->CancelRequest(); + handler->CancelRequest(); break; } } -void SSLPolicy::OnMixedContent(SSLManager::MixedContentHandler* handler) { +void SSLPolicy::OnMixedContent(SSLMixedContentHandler* handler) { // Get the user's mixed content preference. PrefService* prefs = handler->GetTabContents()->profile()->GetPrefs(); FilterPolicy::Type filter_policy = @@ -239,7 +240,7 @@ void SSLPolicy::OnMixedContent(SSLManager::MixedContentHandler* handler) { AddMixedContentWarningToConsole(handler); } -void SSLPolicy::OnRequestStarted(SSLManager::RequestInfo* info) { +void SSLPolicy::OnRequestStarted(SSLRequestInfo* info) { if (net::IsCertStatusError(info->ssl_cert_status())) UpdateStateForUnsafeContent(info); @@ -309,24 +310,24 @@ bool SSLPolicy::IsMixedContent(const GURL& url, //////////////////////////////////////////////////////////////////////////////// // SSLBlockingPage::Delegate methods -SSLErrorInfo SSLPolicy::GetSSLErrorInfo(SSLManager::CertError* error) { +SSLErrorInfo SSLPolicy::GetSSLErrorInfo(SSLCertErrorHandler* handler) { return SSLErrorInfo::CreateError( - SSLErrorInfo::NetErrorToErrorType(error->cert_error()), - error->ssl_info().cert, error->request_url()); + SSLErrorInfo::NetErrorToErrorType(handler->cert_error()), + handler->ssl_info().cert, handler->request_url()); } -void SSLPolicy::OnDenyCertificate(SSLManager::CertError* error) { +void SSLPolicy::OnDenyCertificate(SSLCertErrorHandler* handler) { // Default behavior for rejecting a certificate. // // While DenyCertForHost() executes synchronously on this thread, // CancelRequest() gets posted to a different thread. Calling // DenyCertForHost() first ensures deterministic ordering. - error->manager()->DenyCertForHost(error->ssl_info().cert, - error->request_url().host()); - error->CancelRequest(); + handler->manager()->DenyCertForHost(handler->ssl_info().cert, + handler->request_url().host()); + handler->CancelRequest(); } -void SSLPolicy::OnAllowCertificate(SSLManager::CertError* error) { +void SSLPolicy::OnAllowCertificate(SSLCertErrorHandler* handler) { // Default behavior for accepting a certificate. // Note that we should not call SetMaxSecurityStyle here, because the active // NavigationEntry has just been deleted (in HideInterstitialPage) and the @@ -337,33 +338,33 @@ void SSLPolicy::OnAllowCertificate(SSLManager::CertError* error) { // While AllowCertForHost() executes synchronously on this thread, // ContinueRequest() gets posted to a different thread. Calling // AllowCertForHost() first ensures deterministic ordering. - error->manager()->AllowCertForHost(error->ssl_info().cert, - error->request_url().host()); - error->ContinueRequest(); + handler->manager()->AllowCertForHost(handler->ssl_info().cert, + handler->request_url().host()); + handler->ContinueRequest(); } //////////////////////////////////////////////////////////////////////////////// // Certificate Error Routines -void SSLPolicy::OnOverridableCertError(SSLManager::CertError* error) { - if (error->resource_type() != ResourceType::MAIN_FRAME) { +void SSLPolicy::OnOverridableCertError(SSLCertErrorHandler* handler) { + if (handler->resource_type() != ResourceType::MAIN_FRAME) { // A sub-resource has a certificate error. The user doesn't really // have a context for making the right decision, so block the // request hard, without an info bar to allow showing the insecure // content. - error->DenyRequest(); + handler->DenyRequest(); return; } // We need to ask the user to approve this certificate. - ShowBlockingPage(this, error); + ShowBlockingPage(this, handler); } -void SSLPolicy::OnFatalCertError(SSLManager::CertError* error) { - if (error->resource_type() != ResourceType::MAIN_FRAME) { - error->DenyRequest(); +void SSLPolicy::OnFatalCertError(SSLCertErrorHandler* handler) { + if (handler->resource_type() != ResourceType::MAIN_FRAME) { + handler->DenyRequest(); return; } - error->CancelRequest(); - ShowErrorPage(this, error); + handler->CancelRequest(); + ShowErrorPage(this, handler); // No need to degrade our security indicators because we didn't continue. } diff --git a/chrome/browser/ssl/ssl_policy.h b/chrome/browser/ssl/ssl_policy.h index 51a3a3a..570783f 100644 --- a/chrome/browser/ssl/ssl_policy.h +++ b/chrome/browser/ssl/ssl_policy.h @@ -22,9 +22,9 @@ class SSLPolicy : public SSLManager::Delegate, static SSLPolicy* GetDefaultPolicy(); // SSLManager::Delegate methods. - virtual void OnCertError(SSLManager::CertError* error); - virtual void OnMixedContent(SSLManager::MixedContentHandler* handler); - virtual void OnRequestStarted(SSLManager::RequestInfo* info); + virtual void OnCertError(SSLCertErrorHandler* handler); + virtual void OnMixedContent(SSLMixedContentHandler* handler); + virtual void OnRequestStarted(SSLRequestInfo* info); virtual void UpdateEntry(SSLManager* manager, NavigationEntry* entry); // This method is static because it is called from both the UI and the IO @@ -35,9 +35,9 @@ class SSLPolicy : public SSLManager::Delegate, const std::string& frame_origin); // SSLBlockingPage::Delegate methods. - virtual SSLErrorInfo GetSSLErrorInfo(SSLManager::CertError* error); - virtual void OnDenyCertificate(SSLManager::CertError* error); - virtual void OnAllowCertificate(SSLManager::CertError* error); + virtual SSLErrorInfo GetSSLErrorInfo(SSLCertErrorHandler* handler); + virtual void OnDenyCertificate(SSLCertErrorHandler* handler); + virtual void OnAllowCertificate(SSLCertErrorHandler* handler); private: // Construct via |GetDefaultPolicy|. @@ -47,11 +47,11 @@ class SSLPolicy : public SSLManager::Delegate, // Helper method for derived classes handling certificate errors that can be // overridden by the user. // Show a blocking page and let the user continue or cancel the request. - void OnOverridableCertError(SSLManager::CertError* error); + void OnOverridableCertError(SSLCertErrorHandler* handler); // Helper method for derived classes handling fatal certificate errors. // Cancel the request and show an error page. - void OnFatalCertError(SSLManager::CertError* error); + void OnFatalCertError(SSLCertErrorHandler* handler); DISALLOW_COPY_AND_ASSIGN(SSLPolicy); }; diff --git a/chrome/browser/ssl/ssl_request_info.h b/chrome/browser/ssl/ssl_request_info.h new file mode 100644 index 0000000..bd1544a --- /dev/null +++ b/chrome/browser/ssl/ssl_request_info.h @@ -0,0 +1,65 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SSL_SSL_REQUEST_INFO_H_ +#define CHROME_BROWSER_SSL_SSL_REQUEST_INFO_H_ + +#include <string> + +#include "chrome/common/filter_policy.h" +#include "googleurl/src/gurl.h" +#include "webkit/glue/resource_type.h" + +class SSLManager; + +// SSLRequestInfo wraps up the information SSLPolicy needs about a request in +// order to update our security IU. SSLRequestInfo is RefCounted in case we +// need to deal with the request asynchronously. +class SSLRequestInfo : public base::RefCounted<SSLRequestInfo> { + public: + SSLRequestInfo(SSLManager* manager, + const GURL& url, + ResourceType::Type resource_type, + const std::string& frame_origin, + const std::string& main_frame_origin, + FilterPolicy::Type filter_policy, + int pid, + int ssl_cert_id, + int ssl_cert_status) + : manager_(manager), + url_(url), + resource_type_(resource_type), + frame_origin_(frame_origin), + main_frame_origin_(main_frame_origin), + filter_policy_(filter_policy), + pid_(pid), + ssl_cert_id_(ssl_cert_id), + ssl_cert_status_(ssl_cert_status) { + } + + SSLManager* manager() const { return manager_; } + const GURL& url() const { return url_; } + ResourceType::Type resource_type() const { return resource_type_; } + const std::string& frame_origin() const { return frame_origin_; } + const std::string& main_frame_origin() const { return main_frame_origin_; } + FilterPolicy::Type filter_policy() const { return filter_policy_; } + int pid() const { return pid_; } + int ssl_cert_id() const { return ssl_cert_id_; } + int ssl_cert_status() const { return ssl_cert_status_; } + + private: + SSLManager* manager_; + GURL url_; + ResourceType::Type resource_type_; + std::string frame_origin_; + std::string main_frame_origin_; + FilterPolicy::Type filter_policy_; + int pid_; + int ssl_cert_id_; + int ssl_cert_status_; + + DISALLOW_COPY_AND_ASSIGN(SSLRequestInfo); +}; + +#endif // CHROME_BROWSER_SSL_SSL_REQUEST_INFO_H_ diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index a023b9c..a37d2b0 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -1290,14 +1290,19 @@ 'browser/spellchecker.h', 'browser/ssl/ssl_blocking_page.cc', 'browser/ssl/ssl_blocking_page.h', + 'browser/ssl/ssl_cert_error_handler.h', + 'browser/ssl/ssl_error_handler.cc', + 'browser/ssl/ssl_error_handler.h', 'browser/ssl/ssl_error_info.cc', 'browser/ssl/ssl_error_info.h', 'browser/ssl/ssl_host_state.cc', 'browser/ssl/ssl_host_state.h', 'browser/ssl/ssl_manager.cc', 'browser/ssl/ssl_manager.h', + 'browser/ssl/ssl_mixed_content_handler.h', 'browser/ssl/ssl_policy.cc', 'browser/ssl/ssl_policy.h', + 'browser/ssl/ssl_request_info.h', 'browser/status_bubble.h', 'browser/tab_contents/constrained_window.h', 'browser/tab_contents/infobar_delegate.cc', |