Index: chrome/browser/extensions/requirements_provider.h |
diff --git a/chrome/browser/extensions/requirements_provider.h b/chrome/browser/extensions/requirements_provider.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8ef94ded2fa737b26d39a8db557d4bed498e0598 |
--- /dev/null |
+++ b/chrome/browser/extensions/requirements_provider.h |
@@ -0,0 +1,64 @@ |
+// Copyright (c) 2012 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_BROWSER_EXTENSIONS_REQUIREMENTS_PROVIDER_H_ |
+#define CHROME_BROWSER_EXTENSIONS_REQUIREMENTS_PROVIDER_H_ |
+ |
+#include <deque> |
+#include <list> |
+ |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/string16.h" |
+#include "chrome/browser/extensions/extension_service.h" |
+ |
+class ExtensionService; |
+class GPUFeatureChecker; |
+ |
+namespace extensions { |
+class Extension; |
+ |
+class RequirementsProvider { |
Aaron Boodman
2012/07/22 17:46:25
Since this class isn't 'providing' things right no
|
+ public: |
+ RequirementsProvider(); |
+ ~RequirementsProvider(); |
+ |
+ // A false return is always valid, however a true one is only pending. |
+ // ExtensionService::UnsupportedRequirements will be called on |service| |
+ // if the requirements are not fullfilled. |async| will inform the caller |
+ // if check is incomplete. |
+ bool Supports(const Extension* extsnion, std::list<string16>* errors, |
Aaron Boodman
2012/07/22 17:46:25
This is a kind of odd interface. How about making
|
+ bool* async, ExtensionService* service); |
+ |
+ // Answer all the pending requirement checks. |
+ void IsWebGLAvailable(bool available); |
+ void IsCSS3dAvailable(bool available); |
+ |
+ private: |
+ struct GPUFeatureRequest { |
+ GPUFeatureRequest(const std::string& id, |
+ base::WeakPtr<ExtensionService> service); |
+ GPUFeatureRequest(); |
+ ~GPUFeatureRequest(); |
+ |
+ std::string extension_id; |
+ base::WeakPtr<ExtensionService> weak_service; |
+ }; |
+ |
+ scoped_refptr<GPUFeatureChecker> webgl_checker_; |
+ bool checked_for_webgl_; |
+ bool webgl_supported_; |
+ std::deque<GPUFeatureRequest> async_webgl_checks_; |
+ |
+ scoped_refptr<GPUFeatureChecker> css3d_checker_; |
+ bool checked_for_css3d_; |
+ bool css3d_supported_; |
+ std::deque<GPUFeatureRequest> async_css3d_checks_; |
+ |
+ base::WeakPtrFactory<RequirementsProvider> weak_factory_; |
+}; |
+ |
+} // namespace extensions |
+ |
+#endif // CHROME_BROWSER_EXTENSIONS_REQUIREMENTS_PROVIDER_H_ |