Index: chrome_frame/utils.h |
=================================================================== |
--- chrome_frame/utils.h (revision 0) |
+++ chrome_frame/utils.h (revision 0) |
@@ -0,0 +1,227 @@ |
+// 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_FRAME_UTILS_H_ |
+#define CHROME_FRAME_UTILS_H_ |
+ |
+#include <atlbase.h> |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+ |
+// utils.h : Various utility functions and classes |
+ |
+extern const wchar_t kChromeContentPrefix[]; |
+extern const wchar_t kChromeProtocolPrefix[]; |
+ |
+// This function is very similar to the AtlRegisterTypeLib function except |
+// that it takes a parameter that specifies whether to register the typelib |
+// for the current user only or on a machine-wide basis |
+// Refer to the MSDN documentation for AtlRegisterTypeLib for a description of |
+// the arguments |
+HRESULT UtilRegisterTypeLib(HINSTANCE tlb_instance, |
+ LPCOLESTR index, |
+ bool for_current_user_only); |
+ |
+// This function is very similar to the AtlUnRegisterTypeLib function except |
+// that it takes a parameter that specifies whether to unregister the typelib |
+// for the current user only or on a machine-wide basis |
+// Refer to the MSDN documentation for AtlUnRegisterTypeLib for a description |
+// of the arguments |
+HRESULT UtilUnRegisterTypeLib(HINSTANCE tlb_instance, |
+ LPCOLESTR index, |
+ bool for_current_user_only); |
+ |
+HRESULT UtilRegisterTypeLib(LPCWSTR typelib_path, bool for_current_user_only); |
+ |
+HRESULT UtilUnRegisterTypeLib(LPCWSTR typelib_path, bool for_current_user_only); |
+ |
+HRESULT UtilRegisterTypeLib(ITypeLib* typelib, |
+ LPCWSTR typelib_path, |
+ LPCWSTR help_dir, |
+ bool for_current_user_only); |
+ |
+HRESULT UtilUnRegisterTypeLib(ITypeLib* typelib, |
+ bool for_current_user_only); |
+ |
+// Given an HTML fragment, this function looks for the |
+// <meta http-equiv="X-UA-Compatible"> tag and extracts the value of the |
+// "content" attribute |
+// This method will currently return a false positive if the tag appears |
+// inside a string in a <SCRIPT> block. |
+HRESULT UtilGetXUACompatContentValue(const std::wstring& html_string, |
+ std::wstring* content_value); |
+ |
+ |
+// Appends |suffix| to the substring |channel_name| of |string| iff |
+// the first instance of |channel_name| in |string| is not already followed by |
+// |suffix|. |
+// Returns true if |string| was modified. |
+bool AppendSuffixToChannelName(std::wstring* string, |
+ const std::wstring& channel_name, |
+ const std::wstring& suffix); |
+ |
+// Removes |suffix| from |string| if |string| contains |channel_name| followed |
+// by |suffix|. |
+// Returns true if |string| was modified. |
+bool RemoveSuffixFromChannelName(std::wstring* string, |
+ const std::wstring& channel_name, |
+ const std::wstring& suffix); |
+ |
+// Looks for and alters if found the Omaha configuration for Chrome in the |
+// registry. This changes the auto-update release channel to prevent installed |
+// builds of Chrome that include Chrome Frame from getting replaced by |
+// Chrome updates without it. |
+// Adds the Chrome Frame suffix if add_cf_suffix is true, removes it |
+// otherwise. |
+// Returns S_OK if the Chrome Omaha configuration was found and updated. |
+// Returns S_FALSE if the configuration was found but didn't need updating. |
+// Returns REGDB_E_READREGDB if the Chrome Omaha key could not be read. |
+// Returns REGDB_E_WRITEREGDB if the Chrome Omaha key could not be written. |
+HRESULT UtilUpdateOmahaConfig(bool add_cf_suffix); |
+ |
+// Returns a string from ChromeFrame's string table by resource. Must be |
+// provided with a valid resource id. |
+std::wstring GetResourceString(int resource_id); |
+ |
+// Displays a message box indicating that there was a version mismatch between |
+// ChromeFrame and the running instance of Chrome. |
+// server_version is the version of the running instance of Chrome. |
+void DisplayVersionMismatchWarning(HWND parent, |
+ const std::string& server_version); |
+ |
+// This class provides a base implementation for ATL modules which want to |
+// perform all their registration under HKCU. This class overrides the |
+// RegisterServer and UnregisterServer methods and registers the type libraries |
+// under HKCU (the rest of the registation is made under HKCU by changing the |
+// appropriate .RGS files) |
+template < class BaseAtlModule > |
+class AtlPerUserModule : public BaseAtlModule { |
+ public: |
+ HRESULT RegisterServer(BOOL reg_typelib = FALSE, |
+ const CLSID* clsid = NULL) throw() { |
+ HRESULT hr = BaseAtlModule::RegisterServer(FALSE, clsid); |
+ if (FAILED(hr)) { |
+ return hr; |
+ } |
+ if (reg_typelib) { |
+ hr = UtilRegisterTypeLib(_AtlComModule.m_hInstTypeLib, NULL, false); |
+ } |
+ return hr; |
+ } |
+ |
+ HRESULT UnregisterServer(BOOL unreg_typelib, |
+ const CLSID* clsid = NULL) throw() { |
+ HRESULT hr = BaseAtlModule::UnregisterServer(FALSE, clsid); |
+ if (FAILED(hr)) { |
+ return hr; |
+ } |
+ if (unreg_typelib) { |
+ hr = UtilUnRegisterTypeLib(_AtlComModule.m_hInstTypeLib, NULL, false); |
+ } |
+ return hr; |
+ } |
+}; |
+ |
+// Creates a javascript statement for execution from the function name and |
+// arguments passed in. |
+std::string CreateJavascript(const std::string& function_name, |
+ const std::string args); |
+ |
+// Use to prevent the DLL from being unloaded while there are still living |
+// objects with outstanding references. |
+class AddRefModule { |
+ public: |
+ AddRefModule(); |
+ ~AddRefModule(); |
+}; |
+ |
+// Retrieves the executable name of the process hosting us. If |
+// |include_extension| is false, then we strip the extension from the name. |
+std::wstring GetHostProcessName(bool include_extension); |
+ |
+typedef enum BrowserType { |
+ BROWSER_INVALID = -1, |
+ BROWSER_UNKNOWN, |
+ BROWSER_IE, |
+ BROWSER_FIREFOX, |
+ BROWSER_OPERA, |
+}; |
+ |
+BrowserType GetBrowserType(); |
+ |
+typedef enum IEVersion { |
+ IE_INVALID, |
+ NON_IE, |
+ IE_UNSUPPORTED, |
+ IE_6, |
+ IE_7, |
+ IE_8, |
+}; |
+ |
+// To get the IE version when Chrome Frame is hosted in IE. Make sure that |
+// the hosting browser is IE before calling this function, otherwise NON_IE |
+// will be returned. |
+IEVersion GetIEVersion(); |
+ |
+// Retrieves the file version from a module handle without extra round trips |
+// to the disk (as happens with the regular GetFileVersionInfo API). |
+// |
+// @param module A handle to the module for which to retrieve the version info. |
+// @param high On successful return holds the most significant part of the |
+// file version. Must be non-null. |
+// @param low On successful return holds the least significant part of the |
+// file version. May be NULL. |
+// @returns true if the version info was successfully retrieved. |
+bool GetModuleVersion(HMODULE module, uint32* high, uint32* low); |
+ |
+// Return if the IEXPLORE is in private mode. The IEIsInPrivateBrowsing() checks |
+// whether current process is IEXPLORE. |
+bool IsIEInPrivate(); |
+ |
+// Creates a copy of a menu. We need this when original menu comes from |
+// a process with higher integrity. |
+HMENU UtilCloneContextMenu(HMENU original_menu); |
+ |
+// Uses GURL internally to append 'relative' to 'document' |
+std::string ResolveURL(const std::string& document, |
+ const std::string& relative); |
+ |
+// Returns true iff the two urls have the same scheme, same host and same port. |
+bool HaveSameOrigin(const std::string& url1, const std::string& url2); |
+ |
+// Get a boolean configuration value from registry. |
+bool GetConfigBool(bool default_value, const wchar_t* value_name); |
+ |
+// Gets an integer configuration value from the registry. |
+int GetConfigInt(int default_value, const wchar_t* value_name); |
+ |
+// Check if this url is opting into Chrome Frame based on static settings. |
+bool IsOptInUrl(const wchar_t* url); |
+ |
+// A shortcut for QueryService |
+template <typename T> |
+HRESULT DoQueryService(const CLSID& class_id, IUnknown* unk, T** service) { |
+ if (!unk) |
+ return E_INVALIDARG; |
+ ScopedComPtr<IServiceProvider> service_provider; |
+ HRESULT hr = service_provider.QueryFrom(unk); |
+ if (!service_provider) |
+ return hr; |
+ |
+ return service_provider->QueryService(class_id, service); |
+} |
+ |
+// Get url (display name) from a moniker, |bind_context| is optional |
+HRESULT GetUrlFromMoniker(IMoniker* moniker, IBindCtx* bind_context, |
+ std::wstring* url); |
+ |
+// Returns true if the URL passed in is something which can be handled by |
+// Chrome. If this function returns false then we should fail the navigation. |
+bool IsValidUrlScheme(const std::wstring& url); |
+ |
+// This returns the base directory in which to store user profiles. |
+bool GetUserProfileBaseDirectory(std::wstring* path); |
+ |
+#endif // CHROME_FRAME_UTILS_H_ |