From: Yunchan Cho Date: Fri, 28 Jun 2013 08:44:30 +0000 (+0900) Subject: Fixed wrong url query of box on opening PD X-Git-Tag: submit/tizen_2.2/20130927.092158^2~70 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e98313d8a31d7b04b1939e6a6148b6ee584c729e;p=platform%2Fframework%2Fweb%2Fweb-provider.git Fixed wrong url query of box on opening PD [Issue#] DCM-2116 [Problem] wrong width/height data are set to url query of box on loading PD [Cause] such a case has not been considered, so wrong data has been set to url query of box. [Solution] showPd function of IRenderView class has new input param for fixing this issue. Change-Id: I41ce10c5348e271e351767d8cc6fa4a76c38798c --- diff --git a/src/Core/Box.cpp b/src/Core/Box.cpp index bf5001f..695a2b6 100644 --- a/src/Core/Box.cpp +++ b/src/Core/Box.cpp @@ -56,8 +56,8 @@ Box::Box(BoxInfoPtr boxInfo, IBoxPluginFactoryPtr factory, EwkContextPtr ewkCont 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, @@ -86,7 +86,7 @@ bool Box::show() 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()); @@ -130,7 +130,7 @@ bool Box::resize(int width, int height) 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"); @@ -203,8 +203,9 @@ bool Box::openPd(int width, int height, double x, double y) 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; @@ -275,7 +276,7 @@ time_t Box::getLastUpdateRequestTime() 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); @@ -284,13 +285,22 @@ RenderInfoPtr Box::makeRenderInfo(const std::string& renderType) const 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; @@ -323,7 +333,7 @@ RenderInfoPtr Box::makeRenderInfo(const std::string& renderType) const 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()); diff --git a/src/Core/Box.h b/src/Core/Box.h index 41cb8ba..915afb5 100644 --- a/src/Core/Box.h +++ b/src/Core/Box.h @@ -58,7 +58,12 @@ class Box: public IBox, public IBoxContext { ~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 diff --git a/src/Core/View/IRenderView.h b/src/Core/View/IRenderView.h index 6a4dec3..9e24ed0 100644 --- a/src/Core/View/IRenderView.h +++ b/src/Core/View/IRenderView.h @@ -27,6 +27,7 @@ struct RenderInfo { int width; int height; + Evas_Object* window; std::string defaultUrlParams; }; typedef std::shared_ptr RenderInfoPtr; @@ -37,11 +38,11 @@ class IRenderView { 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; diff --git a/src/Core/View/PdHelper.cpp b/src/Core/View/PdHelper.cpp index 00b8f44..106ba3e 100644 --- a/src/Core/View/PdHelper.cpp +++ b/src/Core/View/PdHelper.cpp @@ -25,12 +25,11 @@ #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) { } @@ -63,7 +62,7 @@ void PdHelper::finishOpen(Evas_Object* child) // 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; } @@ -100,7 +99,7 @@ Evas_Object* PdHelper::getPdWebView() const Evas* PdHelper::getPdCanvas() const { LogD("enter"); - evas_object_evas_get(m_win); + evas_object_evas_get(m_pdRenderInfo->window); } bool PdHelper::isPdOpened() const diff --git a/src/Core/View/PdHelper.h b/src/Core/View/PdHelper.h index 16d74ed..6879ba3 100644 --- a/src/Core/View/PdHelper.h +++ b/src/Core/View/PdHelper.h @@ -32,11 +32,10 @@ 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); @@ -56,14 +55,13 @@ class EXPORT_CLASS PdHelper: public IPdHelper { 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; }; diff --git a/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.cpp b/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.cpp index cc9ead1..8f0bfb2 100644 --- a/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.cpp +++ b/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.cpp @@ -27,10 +27,9 @@ IRenderViewPtr AppBoxPluginFactory::createRenderView( std::string boxId, std::string instanceId, - Evas_Object* boxWin, std::shared_ptr ewkContext) { - return AppBoxRenderView::create(boxId, instanceId, boxWin, ewkContext); + return AppBoxRenderView::create(boxId, instanceId, ewkContext); } IRenderBufferPtr AppBoxPluginFactory::createBoxRenderBuffer( diff --git a/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.h b/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.h index 09cf37d..ca5a5f2 100644 --- a/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.h +++ b/src/Plugin/AppBoxPlugin/AppBoxPluginFactory.h @@ -32,7 +32,6 @@ class AppBoxPluginFactory: public IBoxPluginFactory { public: IRenderViewPtr createRenderView( std::string boxId, std::string instanceId, - Evas_Object* boxWin, std::shared_ptr ewkContext); IRenderBufferPtr createBoxRenderBuffer( diff --git a/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp b/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp index d9fb9d7..79e7951 100644 --- a/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp +++ b/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp @@ -48,21 +48,20 @@ static const std::string injectionFile("/usr/share/web-provider/injection.js"); 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); @@ -70,7 +69,7 @@ AppBoxRenderView::AppBoxRenderView( 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); } @@ -81,16 +80,12 @@ AppBoxRenderView::~AppBoxRenderView() 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 @@ -98,17 +93,17 @@ void AppBoxRenderView::showBox(RenderInfoPtr renderInfo) // 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 @@ -119,13 +114,13 @@ void AppBoxRenderView::showBox(RenderInfoPtr renderInfo) // 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( @@ -184,7 +179,7 @@ void AppBoxRenderView::destroyBoxWrtCore() { LogD("enter"); - m_renderBuffer->stopCanvasUpdate(); + m_boxRenderBuffer->stopCanvasUpdate(); deleteRenderTimer(); destroyWrtCore(m_boxWrt); m_boxWrt.reset(); @@ -214,9 +209,8 @@ void AppBoxRenderView::hideBox() { LogD("enter"); destroyBoxWrtCore(); - if (m_boxWin) { - evas_object_hide(m_boxWin); - m_boxWin = NULL; + if (m_boxRenderInfo->window) { + evas_object_hide(m_boxRenderInfo->window); } } @@ -230,43 +224,37 @@ void AppBoxRenderView::resumeBox() 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() @@ -340,7 +328,7 @@ Evas_Object* AppBoxRenderView::getCurrentSnapShot() { LogD("enter"); clearSnapShot(); - m_snapshot = m_renderBuffer->getSnapshot(); + m_snapshot = m_boxRenderBuffer->getSnapshot(); return m_snapshot; } @@ -379,10 +367,10 @@ void AppBoxRenderView::deleteRenderTimer() 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) @@ -550,5 +538,5 @@ void AppBoxRenderView::loadNonEmptyLayoutFinishedCallback( // start to update render buffer! AppBoxRenderView* This = static_cast(data); - This->m_renderBuffer->startCanvasUpdate(); + This->m_boxRenderBuffer->startCanvasUpdate(); } diff --git a/src/Plugin/AppBoxPlugin/AppBoxRenderView.h b/src/Plugin/AppBoxPlugin/AppBoxRenderView.h index 8a36821..a67f6d6 100644 --- a/src/Plugin/AppBoxPlugin/AppBoxRenderView.h +++ b/src/Plugin/AppBoxPlugin/AppBoxRenderView.h @@ -38,17 +38,17 @@ class AppBoxRenderView: public IRenderView { 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(); @@ -99,23 +99,24 @@ class AppBoxRenderView: public IRenderView { // 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; }; diff --git a/src/Plugin/IBoxPluginFactory.h b/src/Plugin/IBoxPluginFactory.h index d05f602..bbcb1ec 100644 --- a/src/Plugin/IBoxPluginFactory.h +++ b/src/Plugin/IBoxPluginFactory.h @@ -33,7 +33,6 @@ class IBoxPluginFactory { public: virtual std::shared_ptr createRenderView( std::string boxId, std::string instanceId, - Evas_Object* boxWin, std::shared_ptr ewkContext) = 0; virtual std::shared_ptr createBoxRenderBuffer(