The license change version 1.0 to version 1.1
[platform/framework/web/web-provider.git] / src / Plugin / AppBoxPlugin / AppBoxRenderView.h
1 /*
2  * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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    AppBoxRenderView.h
18  * @author  Yunchan Cho (yunchan.cho@samsung.com)
19  */
20 #ifndef APP_BOX_RENDER_VIEW_H
21 #define APP_BOX_RENDER_VIEW_H
22
23 #include <string>
24 #include <memory>
25 #include <Eina.h>
26 #include <Ecore.h>
27 #include <Evas.h>
28 #include <ewk_context.h>
29 #include <i_runnable_widget_object.h>
30 #include <Core/View/IRenderView.h>
31 #include <Core/View/IPdHelper.h>
32
33 class AppBoxRenderBuffer;
34
35 class AppBoxRenderView: public IRenderView {
36     public:
37         typedef std::shared_ptr<Ewk_Context> EwkContextPtr;
38
39         static IRenderViewPtr create(
40                 std::string boxId, std::string instanceId, 
41                 Evas_Object* boxWin, EwkContextPtr ewkContext)
42         {
43             return IRenderViewPtr(
44                     new AppBoxRenderView(
45                         boxId, instanceId, boxWin, ewkContext));
46         };
47         virtual void showBox(RenderInfoPtr renderInfo);
48         virtual void hideBox();
49         virtual void pauseBox();
50         virtual void resumeBox();
51         virtual void showPd(Evas_Object* pdWin, RenderInfoPtr renderInfo);
52         virtual void hidePd();
53         Evas_Object* getBoxWebView();
54         Evas_Object* getPdWebView();
55         virtual ~AppBoxRenderView();
56
57     private:
58         // type definition
59         typedef std::shared_ptr<WRT::IRunnableWidgetObject> WrtCorePtr;
60         enum UrlType {
61             URL_TYPE_BOX,
62             URL_TYPE_PD
63         };
64
65         WrtCorePtr createWrtCore(
66                 std::string& startUrl, Evas_Object* win, EwkContextPtr ewkContext);
67         void destroyWrtCore(WrtCorePtr wrt);
68         void destroyBoxWrtCore();
69         void destroyPdWrtCore();
70         std::string getAppId(std::string& boxId);
71         std::string getStartUrl(UrlType type, std::string& defaultParams);
72         Evas_Object* getCurrentSnapShot();
73         void clearSnapShot();
74         void addRenderTimer();
75         void deleteRenderTimer();
76
77         // timer and idler callback
78         static Eina_Bool fireRenderTimerCallback(void* data);
79         static Eina_Bool openPdIdlerCallback(void* data);
80
81         // ewk view callback
82         static void executeScriptCallback(
83                 Evas_Object* webview, const char* result, void* data);
84
85         // user Callbacks of RunnableWidgetObject
86         void startLoadCallback(Evas_Object* webview);
87         void finishLoadCallback(Evas_Object* webview);
88         void createWindowBeforeCallback(Evas** canvas, Evas_Object* parent);
89         void createWindowAfterCallback(Evas_Object* parent, Evas_Object* child);
90         void setBufferCallback(Evas_Object* webview);
91         void unsetBufferCallback(Evas_Object* webview);
92         void decideNavigationCallback(Evas_Object* webview, std::string& uri);
93
94         // constructor
95         explicit AppBoxRenderView(
96                 std::string boxId, std::string instanceId,
97                 Evas_Object* boxWin, EwkContextPtr ewkContext);
98
99         // members
100         std::string m_appId;
101         std::string m_boxId;
102         std::string m_instanceId;
103         Evas_Object* m_boxWin;
104         Evas_Object* m_snapshot;
105         RenderInfoPtr m_renderInfo;
106         WrtCorePtr m_boxWrt;
107         WrtCorePtr m_pdWrt;
108         Ecore_Timer* m_fireRenderTimer;
109         IPdHelperPtr m_pdHelper;
110         bool m_pdFastOpen;
111         EwkContextPtr m_ewkContext;
112         AppBoxRenderBuffer* m_renderBuffer;
113
114         friend class AppBoxRenderBuffer;
115 };
116
117 #endif // APP_BOX_RENDER_VIEW_H