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

Unified Diff: webkit/activex_shim/activex_shared.cc

Issue 200031: Take out the activex control. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/activex_shim/activex_shared.h ('k') | webkit/activex_shim/activex_shim.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/activex_shim/activex_shared.cc
===================================================================
--- webkit/activex_shim/activex_shared.cc (revision 25626)
+++ webkit/activex_shim/activex_shared.cc (working copy)
@@ -1,241 +0,0 @@
-// Copyright (c) 2006-2008 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 "webkit/activex_shim/activex_shared.h"
-
-#include <windows.h>
-#include "base/command_line.h"
-#include "base/file_version_info.h"
-#include "base/string_util.h"
-#include "base/registry.h"
-#include "googleurl/src/gurl.h"
-
-namespace activex_shim {
-
-namespace {
-struct ActiveXAttribute {
- const char* clsid;
- ActiveXTypes type;
- // allowed_sites is a (list) of simple patterns of sites. Rules are:
- // - if pattern is empty or NULL pointer, no sites are allowed.
- // - sites are separated by ";"
- // - "*" will match any sites.
- // - "file" matches file url starts with "file://"
- // - anything else matches the last part of the host.
- // e.g. "95559.com;ecitic.com" allows controls running from 95559.com and
- // ecitic.com.
- // See MatchUrlForSinglePattern for details.
- const char* allowed_sites;
- const char* allowed_codebase_sites;
-};
-} // unnamed namespace.
-
-static const ActiveXAttribute activex_attributes[] = {
- {"d27cdb6e-ae6d-11cf-96b8-444553540000", ACTIVEX_FLASH},
- // WMP 7 and later
- {"6bf52a52-394a-11d3-b153-00c04f79faa6", ACTIVEX_WMP, "*", "microsoft.com"},
- // WMP 6.4
- {"22d6f312-b0f6-11d0-94ab-0080c74c7e95", ACTIVEX_WMP, "*", "microsoft.com"},
- {"cfcdaa03-8be4-11cf-b84b-0020afbbccfa", ACTIVEX_REALPLAYER},
- {"02bf25d5-8c17-4b23-bc80-d3488abddc6b", ACTIVEX_QUICKTIME},
- {"166b1bca-3f9c-11cf-8075-444553540000", ACTIVEX_SHOCKWAVE},
- {"4e174456-5ee6-494d-b6f2-2b52898a620e", ACTIVEX_TESTCONTROL, "file"},
-};
-
-// See chrome_switches.cc, switches::kAllowAllActiveX. We duplicate the value
-// here to avoid dependency on Chrome.
-static const wchar_t kAllowAllActiveX[] = L"allow-all-activex";
-
-static const ActiveXAttribute* FindActiveX(const std::string& clsid) {
- for (unsigned int i = 0; i < arraysize(activex_attributes); ++i) {
- if (LowerCaseEqualsASCII(clsid, activex_attributes[i].clsid))
- return &activex_attributes[i];
- }
- return NULL;
-}
-
-ActiveXTypes MapClassIdToType(const std::string& clsid) {
- const ActiveXAttribute* attr = FindActiveX(clsid);
- if (attr != NULL)
- return attr->type;
- else
- return ACTIVEX_GENERIC;
-}
-
-bool MatchUrlForSinglePattern(const GURL& url, const std::string& pattern) {
- if (pattern.empty())
- return false;
- if (pattern == "*")
- return true;
- if (pattern == "file")
- return url.SchemeIsFile();
- return url.DomainIs(pattern.c_str());
-}
-
-bool MatchUrlForPatterns(const GURL& url, const std::string& patterns) {
- std::vector<std::string> v;
- SplitString(patterns, ';', &v);
- for (unsigned int i = 0; i < v.size(); ++i) {
- if (MatchUrlForSinglePattern(url, v[i]))
- return true;
- }
- return false;
-}
-
-// Whether allow-all-activex is specified in the command line.
-static bool IsAllowAllActiveX() {
- static bool parsed_flag = false;
- static bool allow_all_activex = false;
- if (!parsed_flag) {
- allow_all_activex =
- CommandLine::ForCurrentProcess()->HasSwitch(kAllowAllActiveX);
- parsed_flag = true;
- }
- return allow_all_activex;
-}
-
-// If an ActiveX control is allowed to run from a specific URL.
-bool IsActiveXAllowed(const std::string& clsid, const GURL& url) {
- if (IsAllowAllActiveX())
- return true;
- const ActiveXAttribute* attr = FindActiveX(clsid);
- if (attr == NULL)
- return false;
- if (attr->allowed_sites == NULL)
- return false;
- return MatchUrlForPatterns(url, attr->allowed_sites);
-}
-
-// If an ActiveX control's codebase comes from allowed websites.
-bool IsCodebaseAllowed(const std::string& clsid, const std::string& codebase) {
- if (IsAllowAllActiveX())
- return true;
- GURL url(codebase);
- const ActiveXAttribute* attr = FindActiveX(clsid);
- if (attr == NULL)
- return false;
- if (attr->allowed_codebase_sites == NULL)
- return false;
- return MatchUrlForPatterns(url, attr->allowed_codebase_sites);
-}
-
-bool GetClsidFromClassidAttribute(const std::string& classid,
- std::string* clsid) {
- const unsigned int kClsidPrefixSize = 6;
- if (classid.size() > kClsidPrefixSize) {
- std::string prefix = classid.substr(0, kClsidPrefixSize);
- if (LowerCaseEqualsASCII(prefix, "clsid:")) {
- TrimWhitespace(classid.substr(kClsidPrefixSize), TRIM_ALL, clsid);
- return true;
- }
- }
- return false;
-}
-
-std::string GetVersionFromCodebaseAttribute(const std::string& codebase) {
- std::string version;
- size_t pos = codebase.find('#');
- if (pos == std::string::npos)
- return version;
- std::string rest = codebase.substr(pos + 1);
- std::string version_prefix = "version=";
- if (!StartsWithASCII(rest, "version=", false))
- return version;
- size_t i;
- for (i = version_prefix.size(); i < rest.size(); i++) {
- char c = rest[i];
- if (c != ',' && (c > '9' || c < '0'))
- break;
- }
- return rest.substr(version_prefix.size(), i - version_prefix.size());
-}
-
-// The version string should always be in the form of "1,2,0,4".
-static bool ParseVersionFromCodebase(const std::string& version,
- DWORD* version_ms,
- DWORD* version_ls) {
- *version_ms = 0;
- *version_ls = 0;
- std::vector<int> v;
- std::vector<std::string> sv;
- SplitString(version, ',', &sv);
- for (size_t i = 0; i < sv.size(); ++i)
- v.push_back(atoi(sv[i].c_str()));
- if (v.size() != 4)
- return false;
- *version_ms = MAKELONG(v[1], v[0]);
- *version_ls = MAKELONG(v[3], v[2]);
- return true;
-}
-
-bool IsActiveXInstalled(const std::string& combined_clsid) {
- std::string clsid, version;
- size_t pos = combined_clsid.find('#');
- if (pos == std::string::npos) {
- clsid = combined_clsid;
- } else {
- clsid = combined_clsid.substr(0, pos);
- version = combined_clsid.substr(pos + 1);
- }
- RegKey key;
- std::wstring key_path = std::wstring(L"CLSID\\{") + ASCIIToWide(clsid) + L"}";
- if (!key.Open(HKEY_CLASSES_ROOT, key_path.c_str(), KEY_READ))
- return false;
- // If no specific version is required, any installed version would be fine.
- if (version.empty())
- return true;
- DWORD requested_version_ms = 0;
- DWORD requested_version_ls = 0;
- if (!ParseVersionFromCodebase(version,
- &requested_version_ms,
- &requested_version_ls))
- return true;
- // Get the path to the dll.
- std::wstring path;
- RegKey(HKEY_CLASSES_ROOT, (key_path + L"\\InprocServer32").c_str()).
- ReadValue(NULL, &path);
- if (path.empty())
- return false;
-
- // Get the file version from the dll.
- DWORD file_version_ms, file_version_ls;
- FileVersionInfo* vi = FileVersionInfo::CreateFileVersionInfo(path);
- if (vi == NULL)
- return false;
- if (vi->fixed_file_info() == NULL) {
- delete vi;
- return false;
- }
- file_version_ms = vi->fixed_file_info()->dwFileVersionMS;
- file_version_ls = vi->fixed_file_info()->dwFileVersionLS;
- delete vi;
-
- // Compare the request version and actual file version.
- if (file_version_ms > requested_version_ms)
- return true;
- else if (file_version_ms < requested_version_ms)
- return false;
- else
- return file_version_ls >= requested_version_ls;
-}
-
-bool IsMimeTypeActiveX(const std::string& mimetype) {
- return LowerCaseEqualsASCII(mimetype, "application/x-oleobject") ||
- LowerCaseEqualsASCII(mimetype, "application/oleobject");
-}
-
-bool GetMimeTypeForClsid(const std::string& clsid, std::string* mime_type) {
- DCHECK(mime_type != NULL);
-
- if (!base::strcasecmp(clsid.c_str(),
- "6BF52A52-394A-11D3-B153-00C04F79FAA6") ||
- !base::strcasecmp(clsid.c_str(),
- "22D6F312-B0F6-11D0-94AB-0080C74C7E95")) {
- *mime_type = "application/x-mplayer2";
- return true;
- }
- return false;
-}
-
-} // namespace activex_shim
« no previous file with comments | « webkit/activex_shim/activex_shared.h ('k') | webkit/activex_shim/activex_shim.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698