Chromium Code Reviews| Index: extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc |
| diff --git a/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc b/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..27e84783f742dff891ba45c66c53d139cefbc945 |
| --- /dev/null |
| +++ b/extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.cc |
| @@ -0,0 +1,93 @@ |
| +// Copyright 2014 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 "extensions/components/javascript_dialog_extensions_client/javascript_dialog_extension_client_impl.h" |
| + |
| +#include "components/app_modal_dialogs/javascript_dialog_extensions_client.h" |
| +#include "components/app_modal_dialogs/javascript_dialog_manager.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "extensions/browser/process_manager.h" |
| +#include "extensions/common/extension.h" |
| +#include "ui/gfx/native_widget_types.h" |
| + |
| +namespace { |
| + |
| +using extensions::Extension; |
| + |
| +// Returns the ProcessManager for the browser context from |web_contents|. |
| +extensions::ProcessManager* GetExtensionsProcessManager( |
| + content::WebContents* web_contents) { |
| + return extensions::ProcessManager::Get(web_contents->GetBrowserContext()); |
| +} |
| + |
| +// Returns the extension associated with |web_contents| or NULL if there is no |
| +// associated extension (or extensions are not supported). |
| +const Extension* GetExtensionForWebContents( |
| + content::WebContents* web_contents) { |
| + extensions::ProcessManager* pm = GetExtensionsProcessManager(web_contents); |
| + return pm->GetExtensionForRenderViewHost(web_contents->GetRenderViewHost()); |
| +} |
| + |
| +class JavaScriptDialogExtensionsClientImpl |
| + : public JavaScriptDialogExtensionsClient { |
| + public: |
| + JavaScriptDialogExtensionsClientImpl() {} |
| + ~JavaScriptDialogExtensionsClientImpl() override {} |
| + |
| + // JavaScriptDialogExtensionsClient: |
| + void IncrementLazyKeepaliveCount( |
| + content::WebContents* web_contents) override; |
|
msw
2014/11/05 03:53:56
nit: you can inline these definitions if the class
oshima
2014/11/05 21:42:19
Done.
oshima
2014/11/05 21:42:19
Done.
|
| + void DecrementLazyKeepaliveCount( |
| + content::WebContents* web_contents) override; |
| + bool GetExtensionName(content::WebContents* web_contents, |
| + const GURL& origin_url, |
| + std::string* name_out) override; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogExtensionsClientImpl); |
| +}; |
| + |
| +void JavaScriptDialogExtensionsClientImpl::IncrementLazyKeepaliveCount( |
| + content::WebContents* web_contents) { |
| + const Extension* extension = GetExtensionForWebContents(web_contents); |
| + if (extension == nullptr) |
| + return; |
| + |
| + DCHECK(web_contents); |
| + extensions::ProcessManager* pm = GetExtensionsProcessManager(web_contents); |
| + if (pm) |
| + pm->IncrementLazyKeepaliveCount(extension); |
| +} |
| + |
| +void JavaScriptDialogExtensionsClientImpl::DecrementLazyKeepaliveCount( |
| + content::WebContents* web_contents) { |
| + const Extension* extension = GetExtensionForWebContents(web_contents); |
| + if (extension == nullptr) |
| + return; |
| + |
| + DCHECK(web_contents); |
| + extensions::ProcessManager* pm = GetExtensionsProcessManager(web_contents); |
| + if (pm) |
| + pm->DecrementLazyKeepaliveCount(extension); |
| +} |
| + |
| +bool JavaScriptDialogExtensionsClientImpl::GetExtensionName( |
| + content::WebContents* web_contents, |
| + const GURL& origin_url, |
| + std::string* name_out) { |
| + const Extension* extension = GetExtensionForWebContents(web_contents); |
| + if (extension && |
| + web_contents->GetLastCommittedURL().GetOrigin() == origin_url) { |
| + *name_out = extension->name(); |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| +} // namespace |
| + |
| +void InstallJavaScriptDialogExtensionsClient() { |
| + SetJavaScriptDialogExtensionsClient( |
| + make_scoped_ptr(new JavaScriptDialogExtensionsClientImpl)); |
| +} |