Source code formating unification
[platform/framework/web/wrt.git] / src / api_new / i_runnable_widget_object.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16 /**
17  * @file    i_runnable_widget_object.h
18  * @author  Przemyslaw Ciezkowski (p.ciezkowski@samsung.com)
19  * @version 1.0
20  * @brief   File contains declaration of IRunnableWidgetObject interface.
21  */
22
23 #ifndef RUNNABLE_WIDGET_OBJECT_INTERFACE_H_
24 #define RUNNABLE_WIDGET_OBJECT_INTERFACE_H_
25
26 #include <dpl/wrt-dao-ro/wrt_db_types.h>
27 #include <dpl/fast_delegate.h>
28 #include <memory>
29 #include <Evas.h>
30 #include <widget_model.h>
31
32 #include <dpl/exception.h>
33
34 namespace WRT {
35 typedef DPL::FastDelegate0<void> ProgressFinishCB;
36 typedef DPL::FastDelegate1<Evas_Object*, void> LoadStartCB;
37 typedef DPL::FastDelegate1<Evas_Object*, void> LoadFinishCB;
38 typedef DPL::FastDelegate0<void> WebCrashCB;
39 typedef DPL::FastDelegate2<Evas**, Evas_Object*, void> WindowCreateBeforeCB;
40 typedef DPL::FastDelegate2<Evas_Object*, Evas_Object*,
41                            void> WindowCreateAfterCB;
42 typedef DPL::FastDelegate1<Evas_Object*, void> WindowCloseCB;
43 typedef DPL::FastDelegate0<void> WebkitExitCB;
44 typedef DPL::FastDelegate1<bool, void> ResumeCB;
45 typedef DPL::FastDelegate1<bool, void> SuspendCB;
46 typedef DPL::FastDelegate1<bool, void> ResetCB;
47 typedef DPL::FastDelegate1<Evas_Object*, void> BufferUnsetCB;
48 typedef DPL::FastDelegate1<Evas_Object*, void> BufferSetCB;
49 typedef DPL::FastDelegate1<bool, void> ToggleFullscreenCB;
50
51 typedef struct UserDelegates {
52     ProgressFinishCB progressFinish;
53     LoadStartCB loadStart;
54     LoadFinishCB loadFinish;
55     WebCrashCB webCrash;
56     WindowCreateBeforeCB windowCreateBefore;
57     WindowCreateAfterCB windowCreateAfter;
58     WindowCloseCB windowClose;
59     WebkitExitCB webkitExit;
60     ResumeCB resume;
61     SuspendCB suspend;
62     ResetCB reset;
63     BufferUnsetCB bufferUnset;
64     BufferSetCB bufferSet;
65     ToggleFullscreenCB toggleFullscreen;
66 } UserDelegates;
67
68 typedef std::shared_ptr<UserDelegates> UserDelegatesPtr;
69 typedef std::shared_ptr<WidgetModel> WidgetModelPtr;
70
71 /**
72  * @brief The IRunnableWidgetObject class Runnable object interface
73  *
74  * Interface for managing WRT widgets runnable object.
75  * Methods should be called in approopriatte order. Check graph below.
76  *
77  *    /----------->(INITIAL)
78  *    |                |
79  *    |                | PrepareView()
80  *    |                V
81  *    |            (PREPARED)
82  *    |                |
83  *    | Reset()        | CheckBeforeLaunch()
84  *    |                V
85  *    |           (SECCHECKED)
86  *    |                |
87  *    |                | Show()
88  *    |                V
89  *    |             (SHOWED)
90  *    |               /  ^
91  *    |     Suspend() |  | Resume()
92  *    |               V  /
93  *    |            (SUSPENDED)
94  *    |
95  *    |
96  *    |     (any state besides INITIAL)
97  *    |                |
98  *    |                | Hide()
99  *    |                V
100  *    \-------------(HIDDEN)
101  *
102  */
103 class IRunnableWidgetObject
104 {
105   public:
106     // IRunnableWidgetObject base exception
107     DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
108
109     // Throwed by any method if it is called in wrong state
110     DECLARE_EXCEPTION_TYPE(Base, MethodInvocationForbidden)
111
112     /**
113      * Runs OCSPCheck
114      * @return false when widget is already running or
115      * when security check fails
116      */
117     virtual bool CheckBeforeLaunch() = 0;
118     /**
119      * Prepares view to launch. You MUST call elm_init before calling
120      * this method.
121      * @param window
122      * @param callbacks passed to viewLogic
123      */
124     virtual bool PrepareView(const std::string &startUrl,
125                              Evas_Object *window) = 0;
126     /**
127      * Shows widget asynchronously. Callback will be called when
128      * webkit generates website.
129      * @param callback
130      */
131     virtual void Show() = 0;
132     /**
133      * Hides widget. To show it again Reset must be called.
134      */
135     virtual void Hide() = 0;
136     /**
137      * Stops widget's javascript. If widget has set background_enabled
138      * then this method has no effect. To resume use Resume();
139      */
140     virtual void Suspend() = 0;
141     /**
142      * Resumes widget's javascript after calling Suspend(). Resumes only if
143      * widget is in suspend state.
144      */
145     virtual void Resume() = 0;
146     /**
147      * Resets widgets after calling Hide().
148      */
149     virtual void Reset() = 0;
150     /**
151      * Reload start page on widget.
152      */
153     virtual void ReloadStartPage() = 0;
154     /**
155      * Retrieve widget's top level webview
156      * @return Evas_Object*
157      */
158     virtual Evas_Object* GetCurrentWebview() = 0;
159     /**
160      * Register widget's delegates
161      */
162     virtual void SetUserDelegates(const UserDelegatesPtr& cbs) = 0;
163     /**
164      * Call goBack() on webkit
165      */
166     virtual void Backward() = 0;
167     /**
168      * fire custom javascript event
169      */
170     virtual void FireJavascriptEvent(int event, void* data) = 0;
171
172     virtual ~IRunnableWidgetObject() {}
173 };
174
175 typedef std::shared_ptr<IRunnableWidgetObject> RunnableWidgetObjectPtr;
176 }
177 #endif /* RUNNABLE_WIDGET_OBJECT_INTERFACE_H_ */
178