String result(pResult);
SysLog(NID_WEB_CTRL, "result : %ls", result.GetPointer());
- pPresenter->EndAsyncProcess(result);
+ _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(evas_object_data_get(pView, WEB_CTRL));
+ if (pImpl && pImpl->IsPresenterAlived(pPresenter))
+ {
+ pPresenter->EndAsyncProcess(result);
+ }
}
r = __textSearch.__searchQueue.Construct();
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ r = __callbackList.Construct();
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
r = InitJsBridgeList();
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
String*
-_WebImpl::EvaluateJavascriptN(const String& scriptCode) const
+_WebImpl::EvaluateJavascriptN(const String& scriptCode)
{
- if (scriptCode.GetLength())
+ if (scriptCode.GetLength() == 0)
{
- std::unique_ptr<char[]> pScript(_StringConverter::CopyToCharArrayN(scriptCode));
- SysTryReturn(NID_WEB_CTRL, pScript.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+ return null;
+ }
+
+ result r = E_SUCCESS;
- std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter());
- SysTryReturn(NID_WEB_CTRL, pPresenter.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- pPresenter->InitAsyncProcess();
+ std::unique_ptr<char[]> pScript(_StringConverter::CopyToCharArrayN(scriptCode));
+ SysTryReturn(NID_WEB_CTRL, pScript.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
- ewk_view_script_execute(__pWebCore->GetWebNativeNode(), pScript.get(), OnScriptExecuted, pPresenter.get());
+ std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter());
+ SysTryReturn(NID_WEB_CTRL, pPresenter.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- std::unique_ptr<String> pResult(new (std::nothrow) String(L""));
- SysTryReturn(NID_WEB_CTRL, pResult.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- pPresenter->WaitAsyncProcess(*pResult.get());
+ r = __callbackList.Add(pPresenter.get());
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
- return pResult.release();
- }
+ ewk_view_script_execute(__pWebCore->GetWebNativeNode(), pScript.get(), OnScriptExecuted, pPresenter.get());
- return null;
+ std::unique_ptr<String> pResult(new (std::nothrow) String(L""));
+ SysTryReturn(NID_WEB_CTRL, pResult.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+ pPresenter->WaitAsyncProcess(*pResult.get());
+
+ r = __callbackList.Remove(*pPresenter.get());
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
+ pPresenter.release();
+
+ return pResult.release();
+}
+
+
+bool
+_WebImpl::IsPresenterAlived(_WebPresenter* pPresenter) const
+{
+ return __callbackList.Contains(*pPresenter);
}
#include <unique_ptr.h>
#include <EWebKit2.h>
+#include <FBaseColArrayList.h>
#include <FBaseString.h>
#include <FUiIActionEventListener.h>
#include <FUiIOrientationEventListener.h>
Tizen::Base::String GetTextFromBlock(void) const;
- Tizen::Base::String* EvaluateJavascriptN(const Tizen::Base::String& scriptCode) const;
+ Tizen::Base::String* EvaluateJavascriptN(const Tizen::Base::String& scriptCode);
bool IsPrivateBrowsingEnabled(void) const;
void SetKeypadOpened(bool isKeypadOpened);
+ bool IsPresenterAlived(_WebPresenter* pPresenter) const;
Tizen::Graphics::Rectangle GetPreviousKeypadBounds(void) const;
void SetPreviousKeypadBounds(Tizen::Graphics::Rectangle& bounds);
_TextSearch __textSearch;
+ Tizen::Base::Collection::ArrayList __callbackList;
+
DecisionPolicy __policy;
Tizen::Base::String __defaultUserAgent;