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

Side by Side Diff: chrome/browser/extensions/api/file_handlers/app_file_handler_util.cc

Issue 14790018: ChromeOS: Use file extensions in Files app to decide which apps to use. (Closed) Base URL: http://git.chromium.org/chromium/src.git@file-handler-extensions2
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" 5 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h"
6 6
7 #include "chrome/browser/extensions/extension_prefs.h" 7 #include "chrome/browser/extensions/extension_prefs.h"
8 #include "chrome/browser/extensions/extension_service.h" 8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/extension_system.h" 9 #include "chrome/browser/extensions/extension_system.h"
10 #include "content/public/browser/child_process_security_policy.h" 10 #include "content/public/browser/child_process_security_policy.h"
(...skipping 25 matching lines...) Expand all
36 // Also accept files with no extension for handlers that support an 36 // Also accept files with no extension for handlers that support an
37 // empty extension, i.e. both "foo" and "foo." match. 37 // empty extension, i.e. both "foo" and "foo." match.
38 if (extension->empty() && 38 if (extension->empty() &&
39 path.MatchesExtension(base::FilePath::StringType())) { 39 path.MatchesExtension(base::FilePath::StringType())) {
40 return true; 40 return true;
41 } 41 }
42 } 42 }
43 return false; 43 return false;
44 } 44 }
45 45
46 bool FileHandlerCanHandleFileWithMimeType(
47 const FileHandlerInfo& handler,
48 const std::string& mime_type) {
49 for (std::set<std::string>::const_iterator type = handler.types.begin();
50 type != handler.types.end(); ++type) {
51 if (net::MatchesMimeType(*type, mime_type))
52 return true;
53 }
54 return false;
55 }
56
46 } // namespace 57 } // namespace
47 58
48 typedef std::vector<FileHandlerInfo> FileHandlerList; 59 typedef std::vector<FileHandlerInfo> FileHandlerList;
49 60
50 const FileHandlerInfo* FileHandlerForId(const Extension& app, 61 const FileHandlerInfo* FileHandlerForId(const Extension& app,
51 const std::string& handler_id) { 62 const std::string& handler_id) {
52 const FileHandlerList* file_handlers = FileHandlers::GetFileHandlers(&app); 63 const FileHandlerList* file_handlers = FileHandlers::GetFileHandlers(&app);
53 if (!file_handlers) 64 if (!file_handlers)
54 return NULL; 65 return NULL;
55 66
(...skipping 14 matching lines...) Expand all
70 return NULL; 81 return NULL;
71 82
72 for (FileHandlerList::const_iterator i = file_handlers->begin(); 83 for (FileHandlerList::const_iterator i = file_handlers->begin();
73 i != file_handlers->end(); i++) { 84 i != file_handlers->end(); i++) {
74 if (FileHandlerCanHandleFile(*i, mime_type, path)) 85 if (FileHandlerCanHandleFile(*i, mime_type, path))
75 return &*i; 86 return &*i;
76 } 87 }
77 return NULL; 88 return NULL;
78 } 89 }
79 90
80 std::vector<const FileHandlerInfo*> FindFileHandlersForMimeTypes( 91 std::vector<const FileHandlerInfo*> FindFileHandlersForFiles(
81 const Extension& app, const std::set<std::string>& mime_types) { 92 const Extension& app, const PathAndMimeTypeSet& files) {
82 std::vector<const FileHandlerInfo*> handlers; 93 std::vector<const FileHandlerInfo*> handlers;
83 if (mime_types.empty()) 94 if (files.empty())
84 return handlers; 95 return handlers;
85 96
86 // Look for file handlers which can handle all the MIME types specified. 97 // Look for file handlers which can handle all the MIME types specified.
87 const FileHandlerList* file_handlers = FileHandlers::GetFileHandlers(&app); 98 const FileHandlerList* file_handlers = FileHandlers::GetFileHandlers(&app);
88 if (!file_handlers) 99 if (!file_handlers)
89 return handlers; 100 return handlers;
90 101
91 for (FileHandlerList::const_iterator data = file_handlers->begin(); 102 for (FileHandlerList::const_iterator data = file_handlers->begin();
92 data != file_handlers->end(); ++data) { 103 data != file_handlers->end(); ++data) {
93 bool handles_all_types = true; 104 bool handles_all_types = true;
94 for (std::set<std::string>::const_iterator type_iter = mime_types.begin(); 105 for (PathAndMimeTypeSet::const_iterator it = files.begin();
95 type_iter != mime_types.end(); ++type_iter) { 106 it != files.end(); ++it) {
96 if (!FileHandlerCanHandleFileWithMimeType(*data, *type_iter)) { 107 if (!FileHandlerCanHandleFile(*data, it->second, it->first)) {
97 handles_all_types = false; 108 handles_all_types = false;
98 break; 109 break;
99 } 110 }
100 } 111 }
101 if (handles_all_types) 112 if (handles_all_types)
102 handlers.push_back(&*data); 113 handlers.push_back(&*data);
103 } 114 }
104 return handlers; 115 return handlers;
105 } 116 }
106 117
107 bool FileHandlerCanHandleFile( 118 bool FileHandlerCanHandleFile(
108 const FileHandlerInfo& handler, 119 const FileHandlerInfo& handler,
109 const std::string& mime_type, 120 const std::string& mime_type,
110 const base::FilePath& path) { 121 const base::FilePath& path) {
111 return FileHandlerCanHandleFileWithMimeType(handler, mime_type) || 122 return FileHandlerCanHandleFileWithMimeType(handler, mime_type) ||
112 FileHandlerCanHandleFileWithExtension(handler, path); 123 FileHandlerCanHandleFileWithExtension(handler, path);
113 } 124 }
114 125
115 bool FileHandlerCanHandleFileWithMimeType(
116 const FileHandlerInfo& handler,
117 const std::string& mime_type) {
118 for (std::set<std::string>::const_iterator type = handler.types.begin();
119 type != handler.types.end(); ++type) {
120 if (net::MatchesMimeType(*type, mime_type))
121 return true;
122 }
123 return false;
124 }
125
126 GrantedFileEntry CreateFileEntry( 126 GrantedFileEntry CreateFileEntry(
127 Profile* profile, 127 Profile* profile,
128 const std::string& extension_id, 128 const std::string& extension_id,
129 int renderer_id, 129 int renderer_id,
130 const base::FilePath& path, 130 const base::FilePath& path,
131 bool writable) { 131 bool writable) {
132 GrantedFileEntry result; 132 GrantedFileEntry result;
133 fileapi::IsolatedContext* isolated_context = 133 fileapi::IsolatedContext* isolated_context =
134 fileapi::IsolatedContext::GetInstance(); 134 fileapi::IsolatedContext::GetInstance();
135 DCHECK(isolated_context); 135 DCHECK(isolated_context);
(...skipping 20 matching lines...) Expand all
156 extension_service()->extension_prefs(); 156 extension_service()->extension_prefs();
157 // Save this file entry in the prefs. 157 // Save this file entry in the prefs.
158 prefs->AddSavedFileEntry(extension_id, result.id, path, writable); 158 prefs->AddSavedFileEntry(extension_id, result.id, path, writable);
159 159
160 return result; 160 return result;
161 } 161 }
162 162
163 } // namespace app_file_handler_util 163 } // namespace app_file_handler_util
164 164
165 } // namespace extensions 165 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698