/* vim: se cin sw=2 ts=2 et : */ /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef __mozilla_widget_GfxInfoBase_h__ #define __mozilla_widget_GfxInfoBase_h__ #include "nsIGfxInfo.h" #include "nsCOMPtr.h" #include "nsIObserver.h" #include "nsWeakReference.h" #include "GfxDriverInfo.h" #include "nsTArray.h" #include "nsString.h" #include "GfxInfoCollector.h" #include "nsIGfxInfoDebug.h" namespace mozilla { namespace widget { class GfxInfoBase : public nsIGfxInfo, public nsIObserver, public nsSupportsWeakReference #ifdef DEBUG , public nsIGfxInfoDebug #endif { public: GfxInfoBase(); virtual ~GfxInfoBase(); NS_DECL_ISUPPORTS NS_DECL_NSIOBSERVER // We only declare a subset of the nsIGfxInfo interface. It's up to derived // classes to implement the rest of the interface. // Derived classes need to use // using GfxInfoBase::GetFeatureStatus; // using GfxInfoBase::GetFeatureSuggestedDriverVersion; // using GfxInfoBase::GetWebGLParameter; // to import the relevant methods into their namespace. NS_SCRIPTABLE NS_IMETHOD GetFeatureStatus(PRInt32 aFeature, PRInt32 *_retval NS_OUTPARAM); NS_SCRIPTABLE NS_IMETHOD GetFeatureSuggestedDriverVersion(PRInt32 aFeature, nsAString & _retval NS_OUTPARAM); NS_SCRIPTABLE NS_IMETHOD GetWebGLParameter(const nsAString & aParam, nsAString & _retval NS_OUTPARAM); NS_SCRIPTABLE NS_IMETHOD GetFailures(PRUint32 *failureCount NS_OUTPARAM, char ***failures NS_OUTPARAM); NS_IMETHOD_(void) LogFailure(const nsACString &failure); NS_SCRIPTABLE NS_IMETHOD GetInfo(JSContext*, jsval*); // Initialization function. If you override this, you must call this class's // version of Init first. // We need Init to be called separately from the constructor so we can // register as an observer after all derived classes have been constructed // and we know we have a non-zero refcount. // Ideally, Init() would be void-return, but the rules of // NS_GENERIC_FACTORY_CONSTRUCTOR_INIT require it be nsresult return. virtual nsresult Init(); // only useful on X11 NS_IMETHOD_(void) GetData() { } static void AddCollector(GfxInfoCollectorBase* collector); static void RemoveCollector(GfxInfoCollectorBase* collector); static nsTArray* mDriverInfo; static bool mDriverInfoObserverInitialized; protected: virtual nsresult GetFeatureStatusImpl(PRInt32 aFeature, PRInt32* aStatus, nsAString& aSuggestedDriverVersion, const nsTArray& aDriverInfo, OperatingSystem* aOS = nsnull); // Gets the driver info table. Used by GfxInfoBase to check for general cases // (while subclasses check for more specific ones). virtual const nsTArray& GetGfxDriverInfo() = 0; private: virtual PRInt32 FindBlocklistedDeviceInList(const nsTArray& aDriverInfo, nsAString& aSuggestedVersion, PRInt32 aFeature, OperatingSystem os); void EvaluateDownloadedBlacklist(nsTArray& aDriverInfo); nsCString mFailures[9]; // The choice of 9 is Ehsan's PRUint32 mFailureCount; }; } } #endif /* __mozilla_widget_GfxInfoBase_h__ */