OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/extensions/extension.h" | 5 #include "chrome/common/extensions/extension.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 // deterministicly choose a location. | 275 // deterministicly choose a location. |
276 CHECK(loc1_rank != loc2_rank); | 276 CHECK(loc1_rank != loc2_rank); |
277 | 277 |
278 // Highest rank has highest priority. | 278 // Highest rank has highest priority. |
279 return (loc1_rank > loc2_rank ? loc1 : loc2 ); | 279 return (loc1_rank > loc2_rank ? loc1 : loc2 ); |
280 } | 280 } |
281 | 281 |
282 void Extension::OverrideLaunchUrl(const GURL& override_url) { | 282 void Extension::OverrideLaunchUrl(const GURL& override_url) { |
283 GURL new_url(override_url); | 283 GURL new_url(override_url); |
284 if (!new_url.is_valid()) { | 284 if (!new_url.is_valid()) { |
285 LOG(WARNING) << "Invalid override url given for " << name(); | 285 DLOG(WARNING) << "Invalid override url given for " << name(); |
286 } else { | 286 } else { |
287 if (new_url.has_port()) { | 287 if (new_url.has_port()) { |
288 LOG(WARNING) << "Override URL passed for " << name() | 288 DLOG(WARNING) << "Override URL passed for " << name() |
289 << " should not contain a port. Removing it."; | 289 << " should not contain a port. Removing it."; |
290 | 290 |
291 GURL::Replacements remove_port; | 291 GURL::Replacements remove_port; |
292 remove_port.ClearPort(); | 292 remove_port.ClearPort(); |
293 new_url = new_url.ReplaceComponents(remove_port); | 293 new_url = new_url.ReplaceComponents(remove_port); |
294 } | 294 } |
295 | 295 |
296 launch_web_url_ = new_url.spec(); | 296 launch_web_url_ = new_url.spec(); |
297 | 297 |
298 URLPattern pattern(kValidWebExtentSchemes); | 298 URLPattern pattern(kValidWebExtentSchemes); |
299 pattern.Parse(new_url.spec(), URLPattern::ERROR_ON_PORTS); | 299 pattern.Parse(new_url.spec(), URLPattern::ERROR_ON_PORTS); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 DCHECK(extension_url.SchemeIs(chrome::kExtensionScheme)); | 373 DCHECK(extension_url.SchemeIs(chrome::kExtensionScheme)); |
374 DCHECK_EQ("/", extension_url.path()); | 374 DCHECK_EQ("/", extension_url.path()); |
375 | 375 |
376 GURL ret_val = GURL(extension_url.spec() + relative_path); | 376 GURL ret_val = GURL(extension_url.spec() + relative_path); |
377 DCHECK(StartsWithASCII(ret_val.spec(), extension_url.spec(), false)); | 377 DCHECK(StartsWithASCII(ret_val.spec(), extension_url.spec(), false)); |
378 | 378 |
379 return ret_val; | 379 return ret_val; |
380 } | 380 } |
381 | 381 |
382 bool Extension::GenerateId(const std::string& input, std::string* output) { | 382 bool Extension::GenerateId(const std::string& input, std::string* output) { |
383 CHECK(output); | 383 DCHECK(output); |
384 uint8 hash[Extension::kIdSize]; | 384 uint8 hash[Extension::kIdSize]; |
385 crypto::SHA256HashString(input, hash, sizeof(hash)); | 385 crypto::SHA256HashString(input, hash, sizeof(hash)); |
386 *output = StringToLowerASCII(base::HexEncode(hash, sizeof(hash))); | 386 *output = StringToLowerASCII(base::HexEncode(hash, sizeof(hash))); |
387 ConvertHexadecimalToIDAlphabet(output); | 387 ConvertHexadecimalToIDAlphabet(output); |
388 | 388 |
389 return true; | 389 return true; |
390 } | 390 } |
391 | 391 |
392 // Helper method that loads a UserScript object from a dictionary in the | 392 // Helper method that loads a UserScript object from a dictionary in the |
393 // content_script list of the manifest. | 393 // content_script list of the manifest. |
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1152 *error = ExtensionErrorUtils::FormatErrorMessage( | 1152 *error = ExtensionErrorUtils::FormatErrorMessage( |
1153 errors::kInvalidIsolationValue, | 1153 errors::kInvalidIsolationValue, |
1154 base::UintToString(i)); | 1154 base::UintToString(i)); |
1155 return false; | 1155 return false; |
1156 } | 1156 } |
1157 | 1157 |
1158 // Check for isolated storage. | 1158 // Check for isolated storage. |
1159 if (isolation_string == values::kIsolatedStorage) { | 1159 if (isolation_string == values::kIsolatedStorage) { |
1160 is_storage_isolated_ = true; | 1160 is_storage_isolated_ = true; |
1161 } else { | 1161 } else { |
1162 LOG(WARNING) << "Did not recognize isolation type: " | 1162 DLOG(WARNING) << "Did not recognize isolation type: " |
1163 << isolation_string; | 1163 << isolation_string; |
1164 } | 1164 } |
1165 } | 1165 } |
1166 return true; | 1166 return true; |
1167 } | 1167 } |
1168 | 1168 |
1169 bool Extension::LoadWebIntents(const base::DictionaryValue& manifest, | 1169 bool Extension::LoadWebIntents(const base::DictionaryValue& manifest, |
1170 std::string* error) { | 1170 std::string* error) { |
1171 DCHECK(error); | 1171 DCHECK(error); |
1172 | 1172 |
1173 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableWebIntents)) | 1173 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableWebIntents)) |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1327 | 1327 |
1328 working = working.substr(start_pos, end_pos - start_pos); | 1328 working = working.substr(start_pos, end_pos - start_pos); |
1329 if (working.length() == 0) | 1329 if (working.length() == 0) |
1330 return false; | 1330 return false; |
1331 } | 1331 } |
1332 | 1332 |
1333 return base::Base64Decode(working, output); | 1333 return base::Base64Decode(working, output); |
1334 } | 1334 } |
1335 | 1335 |
1336 bool Extension::ProducePEM(const std::string& input, std::string* output) { | 1336 bool Extension::ProducePEM(const std::string& input, std::string* output) { |
1337 CHECK(output); | 1337 DCHECK(output); |
1338 if (input.length() == 0) | 1338 if (input.length() == 0) |
1339 return false; | 1339 return false; |
1340 | 1340 |
1341 return base::Base64Encode(input, output); | 1341 return base::Base64Encode(input, output); |
1342 } | 1342 } |
1343 | 1343 |
1344 bool Extension::FormatPEMForFileOutput(const std::string& input, | 1344 bool Extension::FormatPEMForFileOutput(const std::string& input, |
1345 std::string* output, | 1345 std::string* output, |
1346 bool is_public) { | 1346 bool is_public) { |
1347 CHECK(output); | 1347 DCHECK(output); |
1348 if (input.length() == 0) | 1348 if (input.length() == 0) |
1349 return false; | 1349 return false; |
1350 *output = ""; | 1350 *output = ""; |
1351 output->append(kKeyBeginHeaderMarker); | 1351 output->append(kKeyBeginHeaderMarker); |
1352 output->append(" "); | 1352 output->append(" "); |
1353 output->append(is_public ? kPublic : kPrivate); | 1353 output->append(is_public ? kPublic : kPrivate); |
1354 output->append(" "); | 1354 output->append(" "); |
1355 output->append(kKeyInfoEndMarker); | 1355 output->append(kKeyInfoEndMarker); |
1356 output->append("\n"); | 1356 output->append("\n"); |
1357 for (size_t i = 0; i < input.length(); ) { | 1357 for (size_t i = 0; i < input.length(); ) { |
(...skipping 23 matching lines...) Expand all Loading... |
1381 | 1381 |
1382 // static | 1382 // static |
1383 void Extension::DecodeIconFromPath(const FilePath& icon_path, | 1383 void Extension::DecodeIconFromPath(const FilePath& icon_path, |
1384 Icons icon_size, | 1384 Icons icon_size, |
1385 scoped_ptr<SkBitmap>* result) { | 1385 scoped_ptr<SkBitmap>* result) { |
1386 if (icon_path.empty()) | 1386 if (icon_path.empty()) |
1387 return; | 1387 return; |
1388 | 1388 |
1389 std::string file_contents; | 1389 std::string file_contents; |
1390 if (!file_util::ReadFileToString(icon_path, &file_contents)) { | 1390 if (!file_util::ReadFileToString(icon_path, &file_contents)) { |
1391 LOG(ERROR) << "Could not read icon file: " << icon_path.LossyDisplayName(); | 1391 DLOG(ERROR) << "Could not read icon file: " << icon_path.LossyDisplayName(); |
1392 return; | 1392 return; |
1393 } | 1393 } |
1394 | 1394 |
1395 // Decode the image using WebKit's image decoder. | 1395 // Decode the image using WebKit's image decoder. |
1396 const unsigned char* data = | 1396 const unsigned char* data = |
1397 reinterpret_cast<const unsigned char*>(file_contents.data()); | 1397 reinterpret_cast<const unsigned char*>(file_contents.data()); |
1398 webkit_glue::ImageDecoder decoder; | 1398 webkit_glue::ImageDecoder decoder; |
1399 scoped_ptr<SkBitmap> decoded(new SkBitmap()); | 1399 scoped_ptr<SkBitmap> decoded(new SkBitmap()); |
1400 *decoded = decoder.Decode(data, file_contents.length()); | 1400 *decoded = decoder.Decode(data, file_contents.length()); |
1401 if (decoded->empty()) { | 1401 if (decoded->empty()) { |
1402 LOG(ERROR) << "Could not decode icon file: " | 1402 DLOG(ERROR) << "Could not decode icon file: " |
1403 << icon_path.LossyDisplayName(); | 1403 << icon_path.LossyDisplayName(); |
1404 return; | 1404 return; |
1405 } | 1405 } |
1406 | 1406 |
1407 if (decoded->width() != icon_size || decoded->height() != icon_size) { | 1407 if (decoded->width() != icon_size || decoded->height() != icon_size) { |
1408 LOG(ERROR) << "Icon file has unexpected size: " | 1408 DLOG(ERROR) << "Icon file has unexpected size: " |
1409 << base::IntToString(decoded->width()) << "x" | 1409 << base::IntToString(decoded->width()) << "x" |
1410 << base::IntToString(decoded->height()); | 1410 << base::IntToString(decoded->height()); |
1411 return; | 1411 return; |
1412 } | 1412 } |
1413 | 1413 |
1414 result->swap(decoded); | 1414 result->swap(decoded); |
1415 } | 1415 } |
1416 | 1416 |
1417 // static | 1417 // static |
1418 const SkBitmap& Extension::GetDefaultIcon(bool is_app) { | 1418 const SkBitmap& Extension::GetDefaultIcon(bool is_app) { |
1419 if (is_app) { | 1419 if (is_app) { |
1420 return *ResourceBundle::GetSharedInstance().GetBitmapNamed( | 1420 return *ResourceBundle::GetSharedInstance().GetBitmapNamed( |
(...skipping 1567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2988 already_disabled(false), | 2988 already_disabled(false), |
2989 extension(extension) {} | 2989 extension(extension) {} |
2990 | 2990 |
2991 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 2991 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
2992 const Extension* extension, | 2992 const Extension* extension, |
2993 const ExtensionPermissionSet* permissions, | 2993 const ExtensionPermissionSet* permissions, |
2994 Reason reason) | 2994 Reason reason) |
2995 : reason(reason), | 2995 : reason(reason), |
2996 extension(extension), | 2996 extension(extension), |
2997 permissions(permissions) {} | 2997 permissions(permissions) {} |
OLD | NEW |