| // Copyright (c) 2013 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 WIN8_TEST_OPEN_WITH_DIALOG_CONTROLLER_H_ |
| #define WIN8_TEST_OPEN_WITH_DIALOG_CONTROLLER_H_ |
| |
| #include <windows.h> |
| |
| #include <vector> |
| |
| #include "base/callback_forward.h" |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/strings/string16.h" |
| |
| namespace win8 { |
| |
| // Asynchronously drives Windows 8's OpenWithDialog into making a given program |
| // the default handler for an URL protocol. |
| class OpenWithDialogController { |
| public: |
| // A callback that is invoked upon completion of the OpenWithDialog |
| // interaction. If the HRESULT indicates success, the interaction completed |
| // successfully. Otherwise, the vector of strings may contain the list of |
| // possible choices if the desired program could not be selected. |
| typedef base::Callback<void(HRESULT, std::vector<base::string16>)> |
| SetDefaultCallback; |
| |
| OpenWithDialogController(); |
| ~OpenWithDialogController(); |
| |
| // Starts the process of making |program| the default handler for |
| // |url_protocol|. |parent_window| may be NULL. |callback| will be invoked |
| // upon completion. This instance may be deleted prior to |callback| being |
| // invoked to cancel the operation. |
| // Note: This will fail if |program| is already default for |url_protocol| |
| // since |program| will not show up verbatim in the dialog (e.g., in EN-US, it |
| // will be prefixed by "Keep using "). |
| void Begin(HWND parent_window, |
| const base::string16& url_protocol, |
| const base::string16& program, |
| const SetDefaultCallback& callback); |
| |
| // Sychronously drives the dialog by running a message loop. Do not by any |
| // means call this on a thread that already has a message loop. Returns S_OK |
| // on success. Otherwise, |choices| may contain the list of possible choices |
| // if the desired program could not be selected. |
| HRESULT RunSynchronously(HWND parent_window, |
| const base::string16& url_protocol, |
| const base::string16& program, |
| std::vector<base::string16>* choices); |
| |
| private: |
| class Context; |
| |
| base::WeakPtr<Context> context_; |
| |
| DISALLOW_COPY_AND_ASSIGN(OpenWithDialogController); |
| }; |
| |
| } // namespace win8 |
| |
| #endif // WIN8_TEST_OPEN_WITH_DIALOG_CONTROLLER_H_ |