1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef WIN8_TEST_OPEN_WITH_DIALOG_CONTROLLER_H_ 6 #define WIN8_TEST_OPEN_WITH_DIALOG_CONTROLLER_H_ 7 8 #include <windows.h> 9 10 #include <vector> 11 12 #include "base/basictypes.h" 13 #include "base/callback_forward.h" 14 #include "base/memory/weak_ptr.h" 15 #include "base/strings/string16.h" 16 17 namespace win8 { 18 19 // Asynchronously drives Windows 8's OpenWithDialog into making a given program 20 // the default handler for an URL protocol. 21 class OpenWithDialogController { 22 public: 23 // A callback that is invoked upon completion of the OpenWithDialog 24 // interaction. If the HRESULT indicates success, the interaction completed 25 // successfully. Otherwise, the vector of strings may contain the list of 26 // possible choices if the desired program could not be selected. 27 typedef base::Callback<void(HRESULT, 28 std::vector<string16>)> SetDefaultCallback; 29 30 OpenWithDialogController(); 31 ~OpenWithDialogController(); 32 33 // Starts the process of making |program| the default handler for 34 // |url_protocol|. |parent_window| may be NULL. |callback| will be invoked 35 // upon completion. This instance may be deleted prior to |callback| being 36 // invoked to cancel the operation. 37 // Note: This will fail if |program| is already default for |url_protocol| 38 // since |program| will not show up verbatim in the dialog (e.g., in EN-US, it 39 // will be prefixed by "Keep using "). 40 void Begin(HWND parent_window, 41 const string16& url_protocol, 42 const string16& program, 43 const SetDefaultCallback& callback); 44 45 // Sychronously drives the dialog by running a message loop. Do not by any 46 // means call this on a thread that already has a message loop. Returns S_OK 47 // on success. Otherwise, |choices| may contain the list of possible choices 48 // if the desired program could not be selected. 49 HRESULT RunSynchronously(HWND parent_window, 50 const string16& url_protocol, 51 const string16& program, 52 std::vector<string16>* choices); 53 54 private: 55 class Context; 56 57 base::WeakPtr<Context> context_; 58 59 DISALLOW_COPY_AND_ASSIGN(OpenWithDialogController); 60 }; 61 62 } // namespace win8 63 64 #endif // WIN8_TEST_OPEN_WITH_DIALOG_CONTROLLER_H_ 65