// 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/basictypes.h" #include "base/callback_forward.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_