| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/convert_user_script.h" | 5 #include "chrome/browser/extensions/convert_user_script.h" | 
| 6 | 6 | 
| 7 #include <string> | 7 #include <string> | 
| 8 #include <vector> | 8 #include <vector> | 
| 9 | 9 | 
|  | 10 #include "base/base64.h" | 
| 10 #include "base/file_path.h" | 11 #include "base/file_path.h" | 
| 11 #include "base/file_util.h" | 12 #include "base/file_util.h" | 
| 12 #include "base/scoped_temp_dir.h" | 13 #include "base/scoped_temp_dir.h" | 
| 13 #include "base/sha2.h" | 14 #include "base/sha2.h" | 
| 14 #include "base/string_util.h" | 15 #include "base/string_util.h" | 
| 15 #include "chrome/browser/extensions/user_script_master.h" | 16 #include "chrome/browser/extensions/user_script_master.h" | 
| 16 #include "chrome/common/extensions/extension.h" | 17 #include "chrome/common/extensions/extension.h" | 
| 17 #include "chrome/common/extensions/extension_constants.h" | 18 #include "chrome/common/extensions/extension_constants.h" | 
| 18 #include "chrome/common/extensions/user_script.h" | 19 #include "chrome/common/extensions/user_script.h" | 
| 19 #include "chrome/common/json_value_serializer.h" | 20 #include "chrome/common/json_value_serializer.h" | 
| 20 #include "googleurl/src/gurl.h" | 21 #include "googleurl/src/gurl.h" | 
| 21 #include "net/base/base64.h" |  | 
| 22 | 22 | 
| 23 namespace keys = extension_manifest_keys; | 23 namespace keys = extension_manifest_keys; | 
| 24 | 24 | 
| 25 Extension* ConvertUserScriptToExtension(const FilePath& user_script_path, | 25 Extension* ConvertUserScriptToExtension(const FilePath& user_script_path, | 
| 26                                         const GURL& original_url, | 26                                         const GURL& original_url, | 
| 27                                         std::string* error) { | 27                                         std::string* error) { | 
| 28   std::string content; | 28   std::string content; | 
| 29   if (!file_util::ReadFileToString(user_script_path, &content)) { | 29   if (!file_util::ReadFileToString(user_script_path, &content)) { | 
| 30     *error = "Could not read source file: " + | 30     *error = "Could not read source file: " + | 
| 31         WideToASCII(user_script_path.ToWStringHack()); | 31         WideToASCII(user_script_path.ToWStringHack()); | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 55 | 55 | 
| 56   // Create the public key. | 56   // Create the public key. | 
| 57   // User scripts are not signed, but the public key for an extension doubles as | 57   // User scripts are not signed, but the public key for an extension doubles as | 
| 58   // its unique identity, and we need one of those. A user script's unique | 58   // its unique identity, and we need one of those. A user script's unique | 
| 59   // identity is its namespace+name, so we hash that to create a public key. | 59   // identity is its namespace+name, so we hash that to create a public key. | 
| 60   // There will be no corresponding private key, which means user scripts cannot | 60   // There will be no corresponding private key, which means user scripts cannot | 
| 61   // be auto-updated, or claimed in the gallery. | 61   // be auto-updated, or claimed in the gallery. | 
| 62   char raw[base::SHA256_LENGTH] = {0}; | 62   char raw[base::SHA256_LENGTH] = {0}; | 
| 63   std::string key; | 63   std::string key; | 
| 64   base::SHA256HashString(script_name, raw, base::SHA256_LENGTH); | 64   base::SHA256HashString(script_name, raw, base::SHA256_LENGTH); | 
| 65   net::Base64Encode(std::string(raw, base::SHA256_LENGTH), &key); | 65   base::Base64Encode(std::string(raw, base::SHA256_LENGTH), &key); | 
| 66 | 66 | 
| 67   // The script may not have a name field, but we need one for an extension. If | 67   // The script may not have a name field, but we need one for an extension. If | 
| 68   // it is missing, use the filename of the original URL. | 68   // it is missing, use the filename of the original URL. | 
| 69   if (!script.name().empty()) | 69   if (!script.name().empty()) | 
| 70     root->SetString(keys::kName, script.name()); | 70     root->SetString(keys::kName, script.name()); | 
| 71   else | 71   else | 
| 72     root->SetString(keys::kName, original_url.ExtractFileName()); | 72     root->SetString(keys::kName, original_url.ExtractFileName()); | 
| 73 | 73 | 
| 74   root->SetString(keys::kDescription, script.description()); | 74   root->SetString(keys::kDescription, script.description()); | 
| 75   root->SetString(keys::kVersion, "1.0"); | 75   root->SetString(keys::kVersion, "1.0"); | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 129 | 129 | 
| 130   scoped_ptr<Extension> extension(new Extension(temp_dir.path())); | 130   scoped_ptr<Extension> extension(new Extension(temp_dir.path())); | 
| 131   if (!extension->InitFromValue(*root, false, error)) { | 131   if (!extension->InitFromValue(*root, false, error)) { | 
| 132     NOTREACHED() << "Could not init extension " << *error; | 132     NOTREACHED() << "Could not init extension " << *error; | 
| 133     return NULL; | 133     return NULL; | 
| 134   } | 134   } | 
| 135 | 135 | 
| 136   temp_dir.Take();  // The caller takes ownership of the directory. | 136   temp_dir.Take();  // The caller takes ownership of the directory. | 
| 137   return extension.release(); | 137   return extension.release(); | 
| 138 } | 138 } | 
| OLD | NEW | 
|---|