#git:framework/web/web-provider
Name: livebox.web-provider
Summary: web framework for livebox
-Version: 1.36
+Version: 1.37
Release: 1
Group: main/app
License: Flora License, Version 1.1
boxInfo->contentInfo);
m_boxBuffer->allocate();
m_view = m_factory->createRenderView(
- boxInfo->boxId, boxInfo->instanceId,
- m_boxBuffer->getWindow(),
+ boxInfo->boxId,
+ boxInfo->instanceId,
ewkContext);
m_updateTimer = BoxUpdateTimer::create(
boxInfo->period,
try {
m_updateTimer->start();
- RenderInfoPtr renderInfo = makeRenderInfo(renderTypeCreate);
+ RenderInfoPtr renderInfo = makeRenderInfo(renderTypeCreate, URL_TYPE_BOX);
m_boxBuffer->stopCanvasUpdate();
m_view->showBox(renderInfo);
ecore_idler_add(startUpdateRenderBufferIdlerCallback, m_boxBuffer.get());
m_updateTimer->restart();
m_boxBuffer->reallocate(
m_boxInfo->boxWidth, m_boxInfo->boxHeight);
- RenderInfoPtr renderInfo = makeRenderInfo(renderTypeResize);
+ RenderInfoPtr renderInfo = makeRenderInfo(renderTypeResize, URL_TYPE_BOX);
m_view->showBox(renderInfo);
} catch (...) {
LogD("resize exception");
m_boxInfo->pdHeight);
m_pdBuffer->allocate();
m_pdBuffer->stopCanvasUpdate();
- RenderInfoPtr renderInfo = makeRenderInfo(renderTypeOpenPd);
- m_view->showPd(m_pdBuffer->getWindow(), renderInfo);
+ RenderInfoPtr pdRenderInfo = makeRenderInfo(renderTypeOpenPd, URL_TYPE_PD);
+ RenderInfoPtr boxRenderInfo = makeRenderInfo(renderTypeOpenPd, URL_TYPE_BOX);
+ m_view->showPd(pdRenderInfo, boxRenderInfo);
ecore_idler_add(startUpdateRenderBufferIdlerCallback, m_pdBuffer.get());
} catch (...) {
return false;
return m_lastUpdateRequestTime;
}
-RenderInfoPtr Box::makeRenderInfo(const std::string& renderType) const
+RenderInfoPtr Box::makeRenderInfo(const std::string& renderType, UrlType urlType) const
{
LogD("enter");
RenderInfoPtr renderInfo(new RenderInfo);
renderInfo->defaultUrlParams = "?type=" + renderType;
// set width, height
- if (renderType == renderTypeOpenPd) {
- renderInfo->width = m_boxInfo->pdWidth;
- renderInfo->height = m_boxInfo->pdHeight;
- } else {
+ switch (urlType) {
+ case URL_TYPE_BOX:
+ renderInfo->window = m_boxBuffer->getWindow();
renderInfo->width = m_boxInfo->boxWidth;
renderInfo->height = m_boxInfo->boxHeight;
+ break;
+ case URL_TYPE_PD:
+ renderInfo->window = m_pdBuffer->getWindow();
+ renderInfo->width = m_boxInfo->pdWidth;
+ renderInfo->height = m_boxInfo->pdHeight;
+ break;
+ default:
+ LogD("error url type");
+ return RenderInfoPtr();
}
+
char buff[32];
sprintf(buff, "&width=%d&height=%d", renderInfo->width, renderInfo->height);
renderInfo->defaultUrlParams += buff;
void Box::updateInternal()
{
LogD("enter");
- RenderInfoPtr renderInfo = makeRenderInfo(renderTypeUpdate);
+ RenderInfoPtr renderInfo = makeRenderInfo(renderTypeUpdate, URL_TYPE_BOX);
m_boxBuffer->stopCanvasUpdate();
m_view->showBox(renderInfo);
ecore_idler_add(startUpdateRenderBufferIdlerCallback, m_boxBuffer.get());
~Box();
private:
- RenderInfoPtr makeRenderInfo(const std::string& renderType) const;
+ enum UrlType {
+ URL_TYPE_BOX = 0,
+ URL_TYPE_PD
+ };
+
+ RenderInfoPtr makeRenderInfo(const std::string& renderType, UrlType urlType) const;
void updateInternal();
// IBoxContext
struct RenderInfo {
int width;
int height;
+ Evas_Object* window;
std::string defaultUrlParams;
};
typedef std::shared_ptr<RenderInfo> RenderInfoPtr;
URL_TYPE_BOX,
URL_TYPE_PD
};
- virtual void showBox(RenderInfoPtr renderInfo) = 0;
+ virtual void showBox(RenderInfoPtr boxRenderInfo) = 0;
virtual void hideBox() = 0;
virtual void pauseBox() = 0;
virtual void resumeBox() = 0;
- virtual void showPd(Evas_Object* pdWin, RenderInfoPtr renderInfo) = 0;
+ virtual void showPd(RenderInfoPtr pdRenderInfo, RenderInfoPtr boxRenderInfo) = 0;
virtual void hidePd() = 0;
virtual Evas_Object* getBoxWebView() = 0;
virtual Evas_Object* getPdWebView() = 0;
#include "IPdHelper.h"
#include "PdHelper.h"
-PdHelper::PdHelper(Evas_Object* pdWin, std::string pdStartUrl, RenderInfoPtr pdRenderInfo)
- : m_win(pdWin)
- , m_boxWebView()
+PdHelper::PdHelper(RenderInfoPtr pdRenderInfo, std::string pdStartUrl)
+ : m_boxWebView()
, m_pdWebView()
+ , m_pdRenderInfo(pdRenderInfo)
, m_startUrl(pdStartUrl)
- , m_renderInfo(pdRenderInfo)
, m_opened(false)
{
}
// pd webview set and resize
m_pdWebView = child;
- evas_object_resize(m_pdWebView, m_renderInfo->width, m_renderInfo->height);
+ evas_object_resize(m_pdWebView, m_pdRenderInfo->width, m_pdRenderInfo->height);
m_opened = true;
}
Evas* PdHelper::getPdCanvas() const
{
LogD("enter");
- evas_object_evas_get(m_win);
+ evas_object_evas_get(m_pdRenderInfo->window);
}
bool PdHelper::isPdOpened() const
class EXPORT_CLASS PdHelper: public IPdHelper {
public:
static IPdHelperPtr create(
- Evas_Object* pdWin,
- std::string pdStartUrl,
- RenderInfoPtr pdRenderInfo)
+ RenderInfoPtr pdRenderInfo,
+ std::string pdStartUrl)
{
- return IPdHelperPtr(new PdHelper(pdWin, pdStartUrl, pdRenderInfo));
+ return IPdHelperPtr(new PdHelper(pdRenderInfo, pdStartUrl));
}
virtual void startOpen();
virtual void finishOpen(Evas_Object* child);
static void executeScriptCallback(
Evas_Object* webview, const char* result, void* data);
- PdHelper(Evas_Object* pdWin, std::string pdStartUrl, RenderInfoPtr pdRenderInfo);
+ PdHelper(RenderInfoPtr pdRenderInfo, std::string pdStartUrl);
//members
- Evas_Object* m_win;
Evas_Object* m_boxWebView;
Evas_Object* m_pdWebView;
+ RenderInfoPtr m_pdRenderInfo;
std::string m_startUrl;
- RenderInfoPtr m_renderInfo;
bool m_opened;
};
IRenderViewPtr AppBoxPluginFactory::createRenderView(
std::string boxId, std::string instanceId,
- Evas_Object* boxWin,
std::shared_ptr<Ewk_Context> ewkContext)
{
- return AppBoxRenderView::create(boxId, instanceId, boxWin, ewkContext);
+ return AppBoxRenderView::create(boxId, instanceId, ewkContext);
}
IRenderBufferPtr AppBoxPluginFactory::createBoxRenderBuffer(
public:
IRenderViewPtr createRenderView(
std::string boxId, std::string instanceId,
- Evas_Object* boxWin,
std::shared_ptr<Ewk_Context> ewkContext);
IRenderBufferPtr createBoxRenderBuffer(
// injection javascript file regarding creating js object used by box and pd
static const std::string injectionFile("/usr/share/web-provider/injection.js");
+static const std::string renderReadyKey("ready");
AppBoxRenderView::AppBoxRenderView(
std::string boxId, std::string instanceId,
- Evas_Object* boxWin, EwkContextPtr ewkContext)
+ EwkContextPtr ewkContext)
: m_appId()
, m_boxId(boxId)
, m_instanceId(instanceId)
- , m_boxWin(boxWin)
- , m_snapshot()
- , m_renderInfo()
+ , m_ewkContext(ewkContext)
+ , m_boxRenderInfo()
, m_boxWrt()
- , m_boxWrt_isSuspended(false)
, m_pdWrt()
+ , m_snapshot()
, m_fireRenderTimer()
, m_pdHelper()
, m_pdFastOpen(false)
- , m_ewkContext(ewkContext)
- , m_renderBuffer()
+ , m_boxRenderBuffer()
+ , m_boxWrt_isSuspended(false)
{
LogD("enter");
m_appId = getAppId(m_boxId);
throw; //exception throw!
}
- m_renderBuffer = AppBoxObserver::Instance()->getRenderBuffer(m_instanceId);
+ m_boxRenderBuffer = AppBoxObserver::Instance()->getRenderBuffer(m_instanceId);
m_pdFastOpen = web_provider_livebox_get_pd_fast_open(m_boxId.c_str()) ? true : false;
AppBoxObserver::Instance()->registerRenderView(m_instanceId, this);
}
AppBoxObserver::Instance()->unregisterRenderView(m_instanceId);
}
-void AppBoxRenderView::showBox(RenderInfoPtr renderInfo)
+void AppBoxRenderView::showBox(RenderInfoPtr boxRenderInfo)
{
LogD("enter");
- if (!m_boxWin) {
- return;
- }
-
// stop updating render buffer
- m_renderBuffer->stopCanvasUpdate();
+ m_boxRenderBuffer->stopCanvasUpdate();
clearSnapShot();
// delete already running timer
// stop touch timer
if (web_provider_livebox_get_mouse_event(m_boxId.c_str())) {
- m_renderBuffer->deleteTouchTimer();
+ m_boxRenderBuffer->deleteTouchTimer();
}
// copy to url
- std::string boxStartUrl = getStartUrl(URL_TYPE_BOX, renderInfo->defaultUrlParams);
+ std::string boxStartUrl = getStartUrl(URL_TYPE_BOX, boxRenderInfo->defaultUrlParams);
if (m_boxWrt) {
LogD("existing wrt core is removed");
destroyBoxWrtCore();
}
- m_boxWrt = createWrtCore(boxStartUrl, m_boxWin, m_ewkContext);
+ m_boxWrt = createWrtCore(boxStartUrl, boxRenderInfo->window, m_ewkContext);
m_boxWrt_isSuspended = false;
// in case of showing box by request of pd open
// resize webview fitted to width, height of Box
evas_object_resize(
m_boxWrt->GetCurrentWebview(),
- renderInfo->width,
- renderInfo->height);
+ boxRenderInfo->width,
+ boxRenderInfo->height);
- evas_object_show(m_boxWin);
+ evas_object_show(boxRenderInfo->window);
m_boxWrt->Show();
- m_renderInfo = renderInfo;
+ m_boxRenderInfo = boxRenderInfo;
}
AppBoxRenderView::WrtCorePtr AppBoxRenderView::createWrtCore(
// set basic webview setting
setWebViewBasicSetting(wrt->GetCurrentWebview());
- // To know starting point for updating buffer
- evas_object_smart_callback_add(
- wrt->GetCurrentWebview(),
- "load,nonemptylayout,finished",
- //"frame,rendered",
- loadNonEmptyLayoutFinishedCallback,
- this);
-
return wrt;
}
{
LogD("enter");
- m_renderBuffer->stopCanvasUpdate();
+ m_boxRenderBuffer->stopCanvasUpdate();
deleteRenderTimer();
destroyWrtCore(m_boxWrt);
m_boxWrt.reset();
{
LogD("enter");
destroyBoxWrtCore();
- if (m_boxWin) {
- evas_object_hide(m_boxWin);
- m_boxWin = NULL;
+ if (m_boxRenderInfo->window) {
+ evas_object_hide(m_boxRenderInfo->window);
}
}
LogD("enter");
}
-void AppBoxRenderView::showPd(Evas_Object* pdWin, RenderInfoPtr renderInfo)
+void AppBoxRenderView::showPd(RenderInfoPtr pdRenderInfo, RenderInfoPtr boxRenderInfo)
{
LogD("enter");
- if (!pdWin) {
- return;
- }
-
// create pd helper
- std::string pdStartUrl = getStartUrl(URL_TYPE_PD, renderInfo->defaultUrlParams);
+ std::string pdStartUrl = getStartUrl(URL_TYPE_PD, pdRenderInfo->defaultUrlParams);
if (m_pdFastOpen) {
destroyPdWrtCore();
// if needed, last param regarding ewk context can be set to new one.
- m_pdWrt = createWrtCore(pdStartUrl, pdWin, m_ewkContext);
+ m_pdWrt = createWrtCore(pdStartUrl, pdRenderInfo->window, m_ewkContext);
if (!m_pdWrt) {
LogD("no wrt core instance");
return;
}
- m_pdHelper = AppBoxPdHelper::create(pdWin);
+ m_pdHelper = AppBoxPdHelper::create(pdRenderInfo->window);
// resize webview fitted to width, height of pd
evas_object_resize(
m_pdWrt->GetCurrentWebview(),
- renderInfo->width,
- renderInfo->height);
+ pdRenderInfo->width,
+ pdRenderInfo->height);
// show pd
m_pdWrt->Show();
m_pdHelper->finishOpen(m_pdWrt->GetCurrentWebview());
} else {
- m_pdHelper = PdHelper::create(pdWin, pdStartUrl, renderInfo);
+ m_pdHelper = PdHelper::create(pdRenderInfo, pdStartUrl);
}
// show pd window
- evas_object_show(pdWin);
- // set exiting box url query to new one
- m_renderInfo->defaultUrlParams = renderInfo->defaultUrlParams;
- showBox(m_renderInfo);
+ evas_object_show(pdRenderInfo->window);
+ showBox(boxRenderInfo);
}
void AppBoxRenderView::hidePd()
{
LogD("enter");
clearSnapShot();
- m_snapshot = m_renderBuffer->getSnapshot();
+ m_snapshot = m_boxRenderBuffer->getSnapshot();
return m_snapshot;
}
void AppBoxRenderView::stopRenderBox()
{
deleteRenderTimer();
- m_renderBuffer->stopCanvasUpdate();
+ m_boxRenderBuffer->stopCanvasUpdate();
if (web_provider_livebox_get_mouse_event(m_boxId.c_str())) {
// stop touch timer
- m_renderBuffer->deleteTouchTimer();
+ m_boxRenderBuffer->deleteTouchTimer();
// temp condition
if (m_boxWrt_isSuspended == false)
// To support transparent background
evas_object_color_set(webview, 0, 0, 0, 0);
ewk_view_visibility_set(webview, EINA_TRUE);
+
+ // To know starting point for updating buffer
+ evas_object_smart_callback_add(
+ webview,
+ "load,nonemptylayout,finished",
+ loadNonEmptyLayoutFinishedCallback,
+ this);
+ evas_object_smart_callback_add(
+ webview,
+ "frame,rendered",
+ frameRenderedCallback,
+ this);
+ evas_object_data_set(webview, renderReadyKey.c_str(), "0");
}
Eina_Bool AppBoxRenderView::fireRenderTimerCallback(void* data)
void* data, Evas_Object* webview, void* eventInfo)
{
LogD("enter");
+}
+
+void AppBoxRenderView::frameRenderedCallback(
+ void* data, Evas_Object* webview, void* eventInfo)
+{
+ LogD("enter");
+
+ // TODO keep this temp code by merging webkit rendering patch
+ // skip first frame (transparent) from webkit
+ if(!strcmp("0", static_cast<const char*>(
+ evas_object_data_get(webview, renderReadyKey.c_str()))))
+ {
+ evas_object_data_set(webview, renderReadyKey.c_str(), "1");
+ return;
+ }
// start to update render buffer!
AppBoxRenderView* This = static_cast<AppBoxRenderView*>(data);
- This->m_renderBuffer->startCanvasUpdate();
+ This->m_boxRenderBuffer->startCanvasUpdate();
}
static IRenderViewPtr create(
std::string boxId, std::string instanceId,
- Evas_Object* boxWin, EwkContextPtr ewkContext)
+ EwkContextPtr ewkContext)
{
return IRenderViewPtr(
new AppBoxRenderView(
- boxId, instanceId, boxWin, ewkContext));
+ boxId, instanceId, ewkContext));
};
- virtual void showBox(RenderInfoPtr renderInfo);
+ virtual void showBox(RenderInfoPtr boxRenderInfo);
virtual void hideBox();
virtual void pauseBox();
virtual void resumeBox();
- virtual void showPd(Evas_Object* pdWin, RenderInfoPtr renderInfo);
+ virtual void showPd(RenderInfoPtr pdRenderInfo, RenderInfoPtr boxRenderInfo);
virtual void hidePd();
Evas_Object* getBoxWebView();
Evas_Object* getPdWebView();
Evas_Object* webview, const char* result, void* data);
static void loadNonEmptyLayoutFinishedCallback(
void* data, Evas_Object* webview, void* eventInfo);
+ static void frameRenderedCallback(
+ void* data, Evas_Object* webview, void* eventInfo);
// user Callbacks of RunnableWidgetObject
void startLoadCallback(Evas_Object* webview);
// constructor
explicit AppBoxRenderView(
std::string boxId, std::string instanceId,
- Evas_Object* boxWin, EwkContextPtr ewkContext);
+ EwkContextPtr ewkContext);
// members
std::string m_appId;
std::string m_boxId;
std::string m_instanceId;
- Evas_Object* m_boxWin;
- Evas_Object* m_snapshot;
- RenderInfoPtr m_renderInfo;
+ EwkContextPtr m_ewkContext;
+ RenderInfoPtr m_boxRenderInfo;
WrtCorePtr m_boxWrt;
- bool m_boxWrt_isSuspended;
WrtCorePtr m_pdWrt;
+ Evas_Object* m_snapshot;
Ecore_Timer* m_fireRenderTimer;
IPdHelperPtr m_pdHelper;
bool m_pdFastOpen;
- EwkContextPtr m_ewkContext;
- AppBoxRenderBuffer* m_renderBuffer;
+ AppBoxRenderBuffer* m_boxRenderBuffer;
+
+ // TODO this temporary flag should removed!
+ bool m_boxWrt_isSuspended;
friend class AppBoxRenderBuffer;
};
public:
virtual std::shared_ptr<IRenderView> createRenderView(
std::string boxId, std::string instanceId,
- Evas_Object* boxWin,
std::shared_ptr<Ewk_Context> ewkContext) = 0;
virtual std::shared_ptr<IRenderBuffer> createBoxRenderBuffer(