webengine/osswebengine/WebCore/platform/symbian/FileChooserSymbian.cpp
changeset 0 dd21522fd290
child 25 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebCore/platform/symbian/FileChooserSymbian.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include "config.h"
+#include "Event.h"
+#include "FileChooser.h"
+#include "../bidi.h"
+#include "Document.h"
+#include "FontData.h"
+#include "Icon.h"
+#include "Frame.h"
+#include "LocalizedStrings.h"
+#include "RenderFileUploadControl.h"
+#include "WebCoreFrameBridge.h"
+#include <e32base.h>
+#include "WebFrame.h"
+#include "WebFrameView.h"
+#include "WebView.h"
+#include "Brctl.h"
+#include <BrCtlDialogsProvider.h>
+#include <CommonContentPolicy.h>
+#include <stringloader.h>
+#if defined(__BROWSER_SDK)
+#include <webkit_sdk.rsg>
+#else
+#include <Webkit.rsg>
+#endif
+
+
+class AsyncLaunch : public CAsyncOneShot
+    {
+    public:
+        AsyncLaunch() : CAsyncOneShot(CActive::EPriorityHigh + 1) {}
+
+        ~AsyncLaunch() {}
+        void setFileChooser( WebCore::FileChooser* fileChooser, WebCore::Document* doc ) 
+        {
+            m_fileChooser = fileChooser;  
+            m_document = doc;
+        }
+
+        void Cancel() { }
+    private:
+        void RunL()
+        {
+            TRAP_IGNORE(
+            if( m_fileChooser ) {
+                // fixme s602
+                WebFrame* webFrame = kit(m_document->frame());
+                MBrCtlDialogsProvider* dialogs = webFrame->frameView()->topView()->brCtl()->brCtlDialogsProvider();
+                HBufC* buf = NULL;
+                
+                if( dialogs->DialogFileSelectLC( m_fileChooser->filename(), KNullDesC, buf) && m_fileChooser )
+                    if( !isRestrictedFile( *buf ) )
+                        m_fileChooser->chooseFile( *buf );
+                    else {
+                        TParsePtrC filenameParser( *buf );
+                        HBufC* message = StringLoader::LoadLC(R_QTN_XHTML_QUERY_FILE_RESTRICTED, filenameParser.NameAndExt());
+                        dialogs->DialogNoteL(*message);
+                        CleanupStack::PopAndDestroy();  // message
+                    }
+                CleanupStack::PopAndDestroy();  // buf
+            });
+            delete this;
+        }
+
+        bool isRestrictedFile(const TDesC& filename)
+        {
+            bool banned(ETrue);
+            TRAP_IGNORE( 
+            CCommonContentPolicy* contentPolicy = CCommonContentPolicy::NewLC();
+            banned = contentPolicy->IsClosedFileL( filename );
+            CleanupStack::PopAndDestroy(); //contentPolicy
+            );
+            return banned;
+        }
+
+        WebCore::FileChooser* m_fileChooser;
+        WebCore::Document* m_document;
+    };
+
+namespace WebCore {
+
+FileChooser::FileChooser(FileChooserClient* client, const String& initialFilename)
+    : m_client(client)
+    , m_filename(initialFilename)
+    , m_icon(0)
+    , m_controller( 0 )
+{
+}
+
+FileChooser::~FileChooser()
+{
+    if (m_controller)
+        m_controller->setFileChooser(0, 0);
+}
+
+void FileChooser::openFileChooser(Document* doc)
+{
+    m_controller = new AsyncLaunch();
+
+    if ( m_controller ) {
+        m_controller->setFileChooser( this, doc );
+        m_controller->Call();
+    }
+}
+
+String FileChooser::basenameForWidth(const Font& font, int width) const
+{
+    if (width <= 0)
+        return String();
+
+    TParsePtrC filenameParser( m_filename );
+    return filenameParser.NameAndExt();
+
+// tot:fixme truncate needs work
+/*
+    String strToTruncate;
+    if (m_filename.isEmpty())
+        strToTruncate = fileButtonNoFileSelectedLabel();
+    else
+        strToTruncate = [[NSFileManager defaultManager] displayNameAtPath:m_filename];
+
+    return [WebCoreStringTruncator centerTruncateString:strToTruncate
+            toWidth:width withFont:m_uploadControl->style()->font().primaryFont()->getNSFont()];
+*/
+}
+
+}